【问题标题】:Remove row of Julia Matrix depending on a function根据函数删除 Julia 矩阵的行
【发布时间】:2021-04-30 03:44:45
【问题描述】:

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

How to delete a row of matrix in julia

Julia: delete rows and columns from an array or matix

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

我为列找到了 I need here 的确切转置,但我无法为行调整它。我试过了:

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

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

【问题讨论】:

    标签: arrays performance matrix conditional-statements julia


    【解决方案1】:

    你快到了:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多