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 中,Array
indexing 需要使用 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
我们如何在 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 中,Array
indexing 需要使用 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