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

如何在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

我想使用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
',但是我想知道是否存在一种像嵌套列表理解一样优雅的解决方案。

我能想到的最简单的方法是使用理解,并将它们与
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