首页 > 解决方案 > 遍历 Julia 中的多个变量(或整个矩阵)

问题描述

我有一个 5 维数组想要对每个字段进行计算,并根据结果用“真”或“假”填充每个字段。现在我想知道是否有一种不使用 5 个“嵌套”循环的快速方法。谢谢你的帮助

编辑:对不起,问题不清楚。我需要用 5 个不同的变量进行计算,并且检查了每个可能的组合。我目前的做法是这样的:

while i<10
    while j<10
        while k < 10
            while l<10
                while m <10 
                    #some calculation which returns true or false
                    A[i,j,k,l,m]=f(i, j, k, l, m);
                m+=1;
                end
            l+=1;
            end
        k +=1;
        end
    j+=1; 
    end
i+=1; 
end

其中 A 是我的数组。现在我想知道是否有更有效的方法来做到这一点。对不起,我希望现在更清楚。

标签: arraysmatrixoptimizationmultidimensional-arrayjulia

解决方案


例如,您可以像这样使用CartesianIndices函数:

julia> x = Array{Tuple}(undef, 2,2,2,2,2);

julia> for idx in CartesianIndices(x)
       x[idx] = Tuple(idx)
       end

julia> x
2×2×2×2×2 Array{Tuple,5}:
[:, :, 1, 1, 1] =
 (1, 1, 1, 1, 1)  (1, 2, 1, 1, 1)
 (2, 1, 1, 1, 1)  (2, 2, 1, 1, 1)

[:, :, 2, 1, 1] =
 (1, 1, 2, 1, 1)  (1, 2, 2, 1, 1)
 (2, 1, 2, 1, 1)  (2, 2, 2, 1, 1)

[:, :, 1, 2, 1] =
 (1, 1, 1, 2, 1)  (1, 2, 1, 2, 1)
 (2, 1, 1, 2, 1)  (2, 2, 1, 2, 1)

[:, :, 2, 2, 1] =
 (1, 1, 2, 2, 1)  (1, 2, 2, 2, 1)
 (2, 1, 2, 2, 1)  (2, 2, 2, 2, 1)

[:, :, 1, 1, 2] =
 (1, 1, 1, 1, 2)  (1, 2, 1, 1, 2)
 (2, 1, 1, 1, 2)  (2, 2, 1, 1, 2)

[:, :, 2, 1, 2] =
 (1, 1, 2, 1, 2)  (1, 2, 2, 1, 2)
 (2, 1, 2, 1, 2)  (2, 2, 2, 1, 2)

[:, :, 1, 2, 2] =
 (1, 1, 1, 2, 2)  (1, 2, 1, 2, 2)
 (2, 1, 1, 2, 2)  (2, 2, 1, 2, 2)

[:, :, 2, 2, 2] =
 (1, 1, 2, 2, 2)  (1, 2, 2, 2, 2)
 (2, 1, 2, 2, 2)  (2, 2, 2, 2, 2)

The code stores in an entry `x[a,b,c,d,e]` a tuple `(a,b,c,d,e)`.

推荐阅读