假设我们在 Julia 中有一组笛卡尔索引
julia> typeof(indx)
Array{CartesianIndex{2},1}
现在我们想使用 PyPlot 将它们绘制为散点图。所以我们应该将笛卡尔的 indx-Array 转换为 2D-Matrix,这样我们就可以像这样绘制它:
PyPlot.scatter(indx[:, 1], indx[:, 2])
如何将 Array{CartesianIndex{2},1} 类型的 Array 转换为 Array{Int,2} 类型的 2D-Matrix
顺便说一下,这里是如何生成笛卡尔索引的虚拟数组的代码片段:
A = rand(1:10, 5, 5)
indx = findall(a -> a .> 5, A)
typeof(indx) # this is an Array{CartesianIndex{2},1}
谢谢
最佳答案
一种可能的方法是 hcat(getindex.(indx, 1), getindex.(indx,2))
julia> @btime hcat(getindex.($indx, 1), getindex.($indx,2))
167.372 ns (6 allocations: 656 bytes)
10×2 Array{Int64,2}:
4 1
3 2
4 2
1 3
4 3
5 3
2 4
5 4
1 5
4 5
但是,请注意,您不需要 - 因此可能不应该 - 将索引变为 2D-Matrix 形式。你可以简单地做
PyPlot.scatter(getindex.(indx, 1), getindex.(indx, 2))
关于arrays - 在 Julia 中将 CartesianIndex 数组转换为 2D 矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54256481/