使用Julia中的多维数组中的NaN删除整行?

时间:2017-01-10 22:43:00

标签: multidimensional-array julia

我正在尝试将Remove NaN row from X array and also the corresponding row in Y中的第一个答案从Python翻译成Julia 0.5.0而不导入numpy。我可以用以下内容复制“删除NaN”部分:

x1 = x[!isnan(x)]

但只使用它可以将2D阵列减少到1D,我不希望这样。在这种情况下,numpy.any的Julia等价物是什么?或者,如果没有等效的,我如何保持我的数组2D并删除包含NaN的整个行?

1 个答案:

答案 0 :(得分:2)

您可以找到包含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), 2) # 2 means that we reduce over the second dimension
5×1 Array{Bool,2}:
 false
  true
  true
  true
 false

然后您可以将返回的逻辑数组用作第一维的掩码,但我们需要先将其设为一维:

julia> A[!vec(nanrows), :]
2×4 Array{Float64,2}:
 0.951717  0.0248771  0.903009  0.529702
 0.124465  0.363872   0.434887  0.305722