【问题标题】:Remove null column on julia array删除 julia 数组上的空列
【发布时间】:2018-12-08 14:34:56
【问题描述】:

从 Julia 开始,我希望删除具有 0 值的列。我有一个如下所示的数组,其中包含很多我想删除的空列。

115×40 Array{Float64,2}:
 -0.0  -0.0  -0.0  -0.0  …  -0.0   0.0  -0.0
  0.0  -0.0  -0.0  -0.0      0.0   0.0   0.0
 -0.0  -0.0  -0.0  -0.0     -0.0   0.0  -0.0
  0.0   0.0  -0.0  -0.0     -0.0   0.0   0.0
  0.0   0.0   0.0  -0.0     -0.0   0.0   0.0
 -0.0   1.0  -0.0   0.0  …  -0.0   0.0   0.0
 -0.0  -0.0   0.0  -0.0     -0.0   0.0   0.0
  0.0  -0.0  -0.0  -0.0      0.0   0.0   0.0
  0.0  -0.0   0.0  -0.0     -0.0   0.0   0.0
  ⋮                      ⋱
  0.0   1.0  -0.0  -0.0      0.0  -0.0  -0.0
 -0.0  -0.0   0.0  -0.0      0.0  -0.0  -0.0
  1.0   0.0  -0.0  -0.0      0.0  -0.0   0.0
 -0.0   0.0  -0.0  -0.0  …   0.0  -0.0  -0.0
  0.0   0.0  -0.0   0.0     -0.0  -0.0  -0.0
 -0.0  -0.0  -0.0   0.0     -0.0  -0.0  -0.0
  0.0  -0.0  -0.0   0.0     -0.0   0.0   0.0
 -0.0  -0.0  -0.0  -0.0     -0.0   1.0   0.0

有人知道怎么做吗?

问候,

【问题讨论】:

    标签: julia


    【解决方案1】:

    a为数组,则

    a[:, vec(mapslices(col -> any(col .!= 0), a, dims = 1))]
    

    有效。 mapslicesa 简化为 1x40 布尔矩阵,表示非零列,我们需要将其转换为 Vector 以进行索引,因此 vec(或者,可以dropdims)。

    根据您的应用程序,view 而不是副本可能就足够了。

    【讨论】:

    • mapslices(col -> all(col .!=0), a, dims = 1) 返回一个完整的 False 数组,这不是预期的结果。设置 all(col .==0) 确实为空列返回 True 的数组。使用什么运算符≉?使用 mapslices(col -> any(col .!=0), solution_raw, dims = 1) 似乎可以解决这个问题
    • 当然,我在复制粘贴时混淆了anyallisapprox 的运算符形式,我出于习惯使用它,但结果过于谨慎:文档解释说 x ≈ 0 默认情况下等同于 x == 0。但是,如果您希望有较小的值,在数学上应该为零,但不是数字,您可以使用 isapprox 和非零 atol 参数。
    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 2014-08-31
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    相关资源
    最近更新 更多