如何在Julia中将向量(列表)广播为元组?

5
有没有一个生成器/迭代器函数可以将
a = [1,2]
b = [3,4]

转换为 [(1,3),(2,4)]

a = 1
b = [3,4]

如何使用相同的表达式将列表 [(1,3),(1,4)] 转换为具名元组?

是否有类似的方法创建一个名为元组,例如 [(a=1,b=3),(a=1,b=4)]

2个回答

5
您可以使用Julia的点语法进行广播:
julia> tuple.(a, b)
2-element Array{Tuple{Int64,Int64},1}:
 (1, 3)
 (2, 4)

tuple是一个从其参数创建元组的函数。

对于NamedTuple,您可以直接在元组上调用较低级别的构造函数,例如:

julia> NamedTuple{(:a, :b)}.(tuple.(a, b))
2-element Array{NamedTuple{(:a, :b),Tuple{Int64,Int64}},1}:
 (a = 1, b = 3)
 (a = 2, b = 4)

其中:a:b是已排序的键名,或等效地使用匿名函数:

julia> broadcast((a_i, b_i) -> (a=a_i, b=b_i), a, b)
2-element Array{NamedTuple{(:a, :b),Tuple{Int64,Int64}},1}:
 (a = 1, b = 3)
 (a = 2, b = 4)

希望能帮到你!

4

只需广播tuple函数。

julia> a = [1,2]; b=[3,4];


julia> tuple.(a,b)
2-element Array{Tuple{Int64,Int64},1}:
 (1, 3)
 (2, 4)

julia> tuple.(1, b)
2-element Array{Tuple{Int64,Int64},1}:
 (1, 3)
 (1, 4)

第二个问题 - 广播构造函数:

julia> NamedTuple{(:a, :b)}.(tuple.(1, b))
2-element Array{NamedTuple{(:a, :b),Tuple{Int64,Int64}},1}:
 (a = 1, b = 3)
 (a = 1, b = 4)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接