给定A
一个多维数组,for
如果需要,我可以将每个元素的迭代折叠到一个语句中吗i,j,k,etc.
?换句话说,我正在寻找以下内容的更紧凑版本:
for k in 1:size(A,3)
for j in 1:size(A,2)
for i in 1:size(A,1)
# Do something with A[i+1,j,k], A[i,j+1,k], A[i,j,k+1], etc.
end
end
end
Run Code Online (Sandbox Code Playgroud)
我认为解决方案是使用axes
or CartesianIndices
,但我无法获得正确的语法。失败的尝试:
julia> for (i,j,k) in axes(A)
println(i)
end
1
1
1
julia> for (i,j,k) in CartesianIndices(A)
println(i)
end
ERROR: iteration is deliberately unsupported for CartesianIndex. Use `I` rather than `I...`, or use `Tuple(I)...`
Run Code Online (Sandbox Code Playgroud)
如果除了定义 的解决方案之外i,j,k
,您还可以提供一个无论 中的维数如何都有效的解决方案,那就太好了A
。
你快到了。仔细阅读消息:
错误: CartesianIndex故意不支持迭代。
这是失败的“模式匹配” (i,j,k) in CartesianIndices(...)
,而不是一般的方法(我在重现问题时犯了同样的错误!)。您必须CartesianIndex
首先将单个 es 转换为元组:
julia> for ix in CartesianIndices(A)
println(Tuple(ix))
end
(1, 1, 1)
(2, 1, 1)
(3, 1, 1)
(1, 2, 1)
(2, 2, 1)
(3, 2, 1)
...
Run Code Online (Sandbox Code Playgroud)