gpt4 book ai didi

julia - 迭代数组的最简单方法是什么?

转载 作者:行者123 更新时间:2023-12-04 17:32:45 27 4
gpt4 key购买 nike

x::Vector{Vector{T}} .迭代每个内部向量的所有元素(即 T 类型的所有元素)的最佳方法是什么?我能想到的最好的方法是使用单行符号进行双迭代,即:

for n in eachindex(x), m in eachindex(x[n])
x[n][m]
end

但我想知道是否有一个迭代器,也许在 Iterators 中专为此目的而设计的包装,例如 for i in some_iterator(x) ; x[i] ; end .

更一般地说,迭代任何数组数组(即任何维度的数组)的最内层元素怎么样?

最佳答案

你的方式

for n in eachindex(x), m in eachindex(x[n])
x[n][m]
end

很快。如果您想要最佳速度,请使用
for n in eachindex(x)
y = x[n]
for m in eachindex(y)
y[m]
end
end

这避免了两次取消引用(第一次取消引用很难优化,因为数组是可变的,所以 getindex 不是纯的)。或者,如果您不需要 mn ,你可以使用
for y in x, for z in y
z
end

这也很快。

请注意,列优先存储是无关紧要的,因为这里的所有数组都是一维的。

要回答您的一般问题:
  • 如果维数是编译时常量,请参见 Base.Cartesian
  • 如果维数不是编译时常量,请使用递归

  • 最后,正如 Dan Getz 在评论中提到的:
    using Iterators
    for z in chain(x...)
    z
    end

    也有效。然而,这有一点性能损失。

    关于julia - 迭代数组的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37902670/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com