Julia:通过多个布尔比较获取子数组

Julia: getting subarray with multiple Boolean comparisons

我们如何在 Julia 中编写以下 Matlab 代码?

A=rand(4); 
A(:,A(1,:)>0.7)

我试过:

A=rand(4,4);
A[:,A[1,:].>0.7]

这导致:错误:getindex 没有匹配 getindex(::Array{Float64,2}, ::UnitRange{Int64}, ::BitArray{2})

的方法

您需要删除索引数组中的多余维度。

A=rand(4,4);
A[:,squeeze(A[1,:], 1).>0.7]

** 编辑 **

Julia 在 3.5 年里经历了许多变化,现在 OP 的问题没有实际意义。这种数组索引方式现在可以使用了。

查看当前 Julia Docs on Array Indexing 以获得完整的方法列表。

** 原创,用于历史书籍 **

在 Julia 中,Arrayindexing 需要使用 Vector(这里使用布尔向量)。

完成您想要的事情的一种方法是使用 vec 函数:

julia> A = rand(4,4)
4x4 Array{Float64,2}:
 0.0253057  0.748903  0.633581  0.796249
 0.25894    0.330299  0.668624  0.723979
 0.884216   0.521359  0.957751  0.207386
 0.862909   0.286173  0.592699  0.965437

julia> A[:, vec(A[1,:] .> 0.7)]
4x2 Array{Float64,2}:
 0.748903  0.796249
 0.330299  0.723979
 0.521359  0.207386
 0.286173  0.965437

另一种方式是:

julia> A[:, A[1,:][:] .> 0.7]
4x2 Array{Float64,2}:
 0.748903  0.796249
 0.330299  0.723979
 0.521359  0.207386
 0.286173  0.965437