gpt4 book ai didi

julia - 如何在 Julia 中使用 map 来模拟嵌套列表理解?

转载 作者:行者123 更新时间:2023-12-01 12:50:19 27 4
gpt4 key购买 nike

我想使用 Julia 的 map 函数来模拟嵌套列表理解。这种能力对于并行映射 (pmap) 尤其有用。

例如,这个嵌套列表理解

[x+y for x in [0,10] for y in [1,2,3]]

产生好的结果

6-element Array{Int64,1}:
1
2
3
11
12
13

还有这个

[x+y for x in [0,10], y in [1,2,3]]

产生同样好的结果

2×3 Array{Int64,2}:
1 2 3
11 12 13

这些结果中的任何一个都符合我的目的。

现在这是我用 map 复制这些结果的最大努力

map([0,10]) do x
map([1,2,3]) do y
x + y
end
end

它产生了正确的结果,只是不是我欣赏的形式:

2-element Array{Array{Int64,1},1}:
[1, 2, 3]
[11, 12, 13]

现在我知道有蛮力的方法可以得到我想要的结果,例如 hcat/vcat'ing 输出或将输入操作成矩阵,但是我想知道是否存在像嵌套列表理解一样优雅的解决方案。

最佳答案

我能想到的最简单的方法是使用理解并将它们与map(低 yield )或pmap(在这里您获得真正的值(value))结合起来。

在 Julia 0.7 上(使用在这个版本中你在函数参数功能中解构的事实):

julia> map(((x,y) for x in [0,10] for y in [1,2,3])) do (x,y)
x+y
end
6-element Array{Int64,1}:
1
2
3
11
12
13

julia> map(((x,y) for x in [0,10], y in [1,2,3])) do (x,y)
x+y
end
2×3 Array{Int64,2}:
1 2 3
11 12 13

关于 Julia 0.6.2(不太好):

julia> map(((x,y) for x in [0,10] for y in [1,2,3])) do v
v[1]+v[2]
end
6-element Array{Int64,1}:
1
2
3
11
12
13

julia> map(((x,y) for x in [0,10], y in [1,2,3])) do v
v[1]+v[2]
end
2×3 Array{Int64,2}:
1 2 3
11 12 13

关于julia - 如何在 Julia 中使用 map 来模拟嵌套列表理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49681478/

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