根据函数删除 Julia 矩阵的行

JKH*_*KHA 2 arrays performance matrix conditional-statements julia

如果给定了索引,则有多个问题涉及删除 Julia 矩阵中的特定行。

如何在Julia中删除矩阵的一行

Julia:从数组或矩阵中删除行和列

我需要的略有不同,因为我只想在所有行的值都为零时删除矩阵的一行。当您想删除给定特定条件或函数的行时,也许您可​​以概括我的问题。这里可能是连续的,sum(row .!= 0) == 0

我在这里找到了我需要的列的确切换位,但我无法将其调整为行。我试过:

a[vec(mapslices(col -> any(col .!= 0), a, dims = 1)), :]
a[:, vec(mapslices(col -> any(col .!= 0), a, dims = 2))]
Run Code Online (Sandbox Code Playgroud)

两者均未成功。

举个例子,我想删除以下矩阵中的第三行。

1 0 0 0 0
0 1 0 0 0
0 0 0 0 0
0 0 0 1 0
Run Code Online (Sandbox Code Playgroud)

最后,如果可能的话,我更愿意创建矩阵的视图而不是复制。这不是强制性的,但我认为我不需要副本,因此它可能会更好地运行时间:)

Ben*_*ier 5

你就快到了:

\n
julia> a = [1 0 0 0 0\n            0 1 0 0 0\n            0 0 0 0 0\n            0 0 0 1 0] ;\n\njulia> a[vec(mapslices(col -> any(col .!= 0), a, dims = 2)), :]\n3\xc3\x975 Array{Int64,2}:\n 1  0  0  0  0\n 0  1  0  0  0\n 0  0  0  1  0\n
Run Code Online (Sandbox Code Playgroud)\n

如果你需要它:

\n
julia> view(a, vec(mapslices(col -> any(col .!= 0), a, dims = 2)), :)\n3\xc3\x975 view(::Array{Int64,2}, [1, 2, 4], :) with eltype Int64:\n 1  0  0  0  0\n 0  1  0  0  0\n 0  0  0  1  0\n
Run Code Online (Sandbox Code Playgroud)\n