Julia:有没有办法返回索引中每个值的迭代器



考虑m = [1 2 3; 4 5 6; 7 8 9]

for idx in eachindex(m)
println(idx)
end

我本来以为它会打印(1, 1) (2, 1), (3, 1) .... (1, 3), (2, 3), (3, 3),但它打印1, 2, ..., 9

循环遍历多维数组的所有索引最优雅的方法是什么?

怎么样

julia> for i in CartesianIndices(m)
println(Tuple(i))
end
(1, 1)
(2, 1)
(3, 1)
(1, 2)
(2, 2)
(3, 2)
(1, 3)
(2, 3)
(3, 3)

(您可以使用Tuple(i)访问i::CartseianIndex索引的元组。(

这不一定很优雅,但它很有效:

for i in eachindex(view(m, 1:size(m)[1], 1:size(m)[2]))
println(i)
end
CartesianIndex(1, 1)
CartesianIndex(2, 1)
CartesianIndex(3, 1)
CartesianIndex(1, 2)
CartesianIndex(2, 2)
CartesianIndex(3, 2)
CartesianIndex(1, 3)
CartesianIndex(2, 3)
CartesianIndex(3, 3)

原因是Array使用快速线性索引(范围为1:length(m)(,但并非所有阵列都使用,尤其是view不使用。这些数组使用笛卡尔索引。

相关内容

  • 没有找到相关文章

最新更新