julia - 从 for 循环中收集元组数组

标签 julia

我有一些代码使用 @parallel for 循环进行计算,在每次迭代时生成一个输出元组。我想将这些元组收集到一个数组中以供进一步处理:

n=2
out = @sync @parallel (hcat) for i=1:n
    (i, i+1)
end
for i=1:n
    (j,k) = out[i]
    # do something
end
println("okay")

如果这里只有一次循环迭代,out是一个元组,而不是元组数组,并且(j,k) = out[i]抛出错误。

n=1
out = @sync @parallel (hcat) for i=1:n
    (i, i+1)
end
for i=1:n
    (j,k) = out[i] # error
    # do something
end
println("not reached")

有没有一种方法可以强制 out 成为一个元组数组,而不管 n 的值如何,而不必对 out< 进行任何检查 在循环之后?

谢谢。

最佳答案

当你在 Tuple... 上调用 hcat 时,你将被引导到一个更通用的算法:

julia> @which hcat((1,2))
hcat{T}(X::T...) at abstractarray.jl:710

julia> @which hcat([(1,2)])
hcat{T}(V::Array{T,1}...) at array.jl:690

而且 Julia 需要更多时间来执行 hcat :

julia> @time out = @sync @parallel (hcat) for i=1:10_000
           (i, i+1)
       end;
0.146527 seconds (4.67 k allocations: 508.905 KB)

julia> @time out = @sync @parallel (hcat) for i=1:10_000
           [(i, i+1)]
       end;
0.061976 seconds (4.76 k allocations: 513.370 KB)

此外,如果您使用第二种语法,则在 n=1 时不会出现错误:

n=1
out = @sync @parallel (hcat) for i=1:n
    [(i, i+1)]
end
for i=1:n
    (j,k) = out[i] # OK
    # do something
end

关于julia - 从 for 循环中收集元组数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33508161/

相关文章:

julia - Julia 中的秒表功能

julia - 如何将行添加到 .csv 文件

dictionary - 在 Julia 中检查复杂类型时规范不足

arrays - 如何像在 Python 中一样在 Julia 中拆分数组?

dataframe - 了解 Julia 数据帧索引

julia - 在同一地 block 上绘制两个分布

julia - 评估函数中的向量或元组 (julia)

Julia :追加到一个数组

io - 如何在 Julia 中读取具有特定字节大小(32 位)值的二进制文件?

visual-studio-code - 如何在 VSCode for Julia 中获取 Linting