2017-01-10 5 views
2

Я пытаюсь перевести первый ответ в Remove NaN row from X array and also the corresponding row in Y с Python на Julia 0.5.0 без импорта numpy. Я могу повторить «Cнятие» часть пренебрежимо малых с:Удаление целых строк с помощью NaNs из многомерного массива в Julia?

x1 = x[!isnan(x)] 

, но только с помощью, что уменьшает 2D массив до 1D, и я не хочу этого. Что будет в этом случае эквивалентом Юлии numpy.any? Или, если нет эквивалента, как я могу сохранить свой массив 2D и удалить целые строки, содержащие NaN?

ответ

1

Вы можете найти строки, содержащую запись NaN с any:

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