如何并行迭代两个数组

Dav*_*ela 7 julia

我有两个要同时迭代的数组。

我正在使用这个:

julia> xs = [1,2,3];

julia> ys = [4,5,6];

julia> for i in 1:length(xs)
           x = xs[i]
           y = ys[i]
           @show x, y
       end
(x, y) = (1, 4)
(x, y) = (2, 5)
(x, y) = (3, 6)
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来迭代 Julia 中的多个数组?

Dav*_*ela 10

使用zip与元组解构一起:

julia> xs = [1,2,3];

julia> ys = [4,5,6];

julia> for (x, y) in zip(xs, ys)
           @show x, y
       end
(x, y) = (1, 4)
(x, y) = (2, 5)
(x, y) = (3, 6)
Run Code Online (Sandbox Code Playgroud)

zip 将在最短数组处停止迭代:

julia> for (x, y) in zip([1,2], [0,0,0])
           @show x, y
       end
(x, y) = (1, 0)
(x, y) = (2, 0)
Run Code Online (Sandbox Code Playgroud)

这种模式可以推广到任意数量的列表:

julia> for (x, y, z) in zip([1,2], [3,4], [5,6])
           @show x, y, z
       end
(x, y, z) = (1, 3, 5)
(x, y, z) = (2, 4, 6)
Run Code Online (Sandbox Code Playgroud)

  • 如果您只需要这些值,“zip”是最好的;如果您需要索引,请尝试下面的“eachindex”解决方案。 (2认同)