Arrays 根据函数删除Julia矩阵的行

Arrays 根据函数删除Julia矩阵的行,arrays,performance,matrix,conditional-statements,julia,Arrays,Performance,Matrix,Conditional Statements,Julia,如果给定索引,则有多个问题涉及删除Julia矩阵中的特定行 我需要的是稍微不同的,因为我只想删除矩阵中所有行的值都为零的行。 当您想要删除给定特定条件或函数的行时,也许您可以概括我的问题。这里可能是一行,sum(row.!=0)==0 我找到了列的确切换位,但我无法对行进行调整。我试过: a[vec(mapslices(col -> any(col .!= 0), a, dims = 1)), :] a[:, vec(mapslices(col -> any(col .!= 0)

如果给定索引,则有多个问题涉及删除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))]
两者都没有成功

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

1 0 0 0 0
0 1 0 0 0
0 0 0 0 0
0 0 0 1 0
最后,如果可能的话,我更愿意创建矩阵的视图,而不是复制。这不是强制性的,但我想我不需要副本,这样可以更好地用于运行时间:)

您就快到了:

julia> a = [1 0 0 0 0
            0 1 0 0 0
            0 0 0 0 0
            0 0 0 1 0] ;

julia> a[vec(mapslices(col -> any(col .!= 0), a, dims = 2)), :]
3×5 Array{Int64,2}:
 1  0  0  0  0
 0  1  0  0  0
 0  0  0  1  0
如果您需要它:

julia> view(a, vec(mapslices(col -> any(col .!= 0), a, dims = 2)), :)
3×5 view(::Array{Int64,2}, [1, 2, 4], :) with eltype Int64:
 1  0  0  0  0
 0  1  0  0  0
 0  0  0  1  0
你就快到了:

julia> a = [1 0 0 0 0
            0 1 0 0 0
            0 0 0 0 0
            0 0 0 1 0] ;

julia> a[vec(mapslices(col -> any(col .!= 0), a, dims = 2)), :]
3×5 Array{Int64,2}:
 1  0  0  0  0
 0  1  0  0  0
 0  0  0  1  0
如果您需要它:

julia> view(a, vec(mapslices(col -> any(col .!= 0), a, dims = 2)), :)
3×5 view(::Array{Int64,2}, [1, 2, 4], :) with eltype Int64:
 1  0  0  0  0
 0  1  0  0  0
 0  0  0  1  0