Julia 有一个用于 for
循环的并行宏,它允许执行以下操作:
s = @sync @parallel vcat for i in 1:9
k = iseven(i) ? i÷2 : 3i+1
k^2
end
由于指定的reducer是vcat
,我们得到一个数字数组。
是否可以使用普通的 for 循环执行类似的操作(无需显式初始化并将!插入数组)?
由于我只是想减少使用 vcat,所以问这个问题的另一种方法是:是否有一种简洁可读的多行形式的数组理解?可以扩展到通常的理解语法,如下所示:
s = [
(k = iseven(i) ? i÷2 : 3i+1;
k^2)
for i in 1:9
]
但与 @parallel vcat for
语法相比,这似乎很困惑且可读性较差。有没有更好的方法来进行多行理解?
最佳答案
扩展@Gnimuc的答案,我认为mapreduce
加上do
-syntax相当不错:
julia> mapreduce(vcat, 1:9) do i
k = iseven(i) ? i÷2 : 3i+1
k^2
end
9-element Array{Int64,1}:
16
1
100
4
256
9
484
16
784
关于loops - 非并行 for 循环/多行推导式的缩减器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50951565/