从 Julia 的多维数组中删除带有 NaN 的整行?

问题描述 投票:0回答:1

我正在尝试将 Remove NaN row from X array 中的第一个答案以及 Y 中的相应行从 Python 翻译为 Julia 0.5.0,而不导入 numpy。我可以用以下方法复制“删除 NaN”部分:

x1 = x[!isnan(x)]

但仅使用它会将 2D 数组减少为 1D,我不希望这样。在这种情况下,Julia 中的

numpy.any
相当于什么?或者,如果没有等效项,我如何保持数组为 2D 并删除包含 NaN 的整行?

multidimensional-array julia
1个回答
3
投票

您可以使用

any
:

查找包含 NaN 条目的行
julia> A = rand(5, 4)
       A[rand(1:end, 4)] = NaN
       A
5×4 Array{Float64,2}:
   0.951717    0.0248771  0.903009    0.529702
   0.702505  NaN          0.730396    0.785191
 NaN           0.390453   0.838332  NaN
   0.213665  NaN          0.178303    0.0100249
   0.124465    0.363872   0.434887    0.305722

julia> nanrows = any(isnan, A; dims=2)
5×1 Matrix{Bool}:
  1
  0
  1
  0
  0

然后您可以使用返回的逻辑数组作为第一维的掩码,但我们需要 (1) 使其成为一维(使用

vec
)和 (2) 将 1 翻转为 0 元素:

julia> A[.!vec(nanrows), :]
  3×4 Matrix{Float64}:
   0.429502  0.903061  0.864065  0.289931
   0.760145  0.767524  0.183373  0.145246
   0.101338  0.96232   0.26143   0.136931
© www.soinside.com 2019 - 2024. All rights reserved.