如何在Julia中使用map来模拟嵌套列表理解?
我想使用Julia的如何在Julia中使用map来模拟嵌套列表理解?,julia,list-comprehension,Julia,List Comprehension,我想使用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
函数来模拟嵌套列表理解。此功能对于并行映射(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
',但是我想知道是否存在一种像嵌套列表理解一样优雅的解决方案。我能想到的最简单的方法是使用理解,并将它们与map
(低效益)或pmap
(这里您得到了真正的值)结合起来
在Julia 0.7上(请使用以下事实,即在本版本中,您在函数参数功能中具有解构功能):
关于Julia 0.6.2(不太好):
您可以使用迭代器。product:
julia> map(t -> t[1]+t[2], Iterators.product([0,10], [1,2,3]))
2×3 Array{Int64,2}:
1 2 3
11 12 13
迭代器。product
返回元素为元组的迭代器
(很遗憾,上面的匿名函数无法编写(x,y)->x+y
)
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> map(t -> t[1]+t[2], Iterators.product([0,10], [1,2,3]))
2×3 Array{Int64,2}:
1 2 3
11 12 13