如何在Julia中连接两个向量?

如何在Julia中连接两个向量?,julia,concatenation,Julia,Concatenation,给定两个向量a=[1,2]和b=[3,4],如何获得串联向量c=[1,2,3,4]?似乎可以使用hcat或vcat处理数组,但在使用向量存储元素集合时,似乎不适合首先考虑数据的方向;它只是一个值列表。大多数Array方法将数组视为任意秩(“数据立方体”)的一般“张量”,因此您需要考虑方向。在一般情况下,有cat(a,b;dims),其中hcat和vcat是特例 还有另一类方法将Vectors处理为类似列表的。从中,append是一种将向量附加到另一个向量的方法。问题是它是可变的。因此,您可以,例

给定两个向量
a=[1,2]
b=[3,4]
,如何获得串联向量
c=[1,2,3,4]
?似乎可以使用
hcat
vcat
处理数组,但在使用向量存储元素集合时,似乎不适合首先考虑数据的方向;它只是一个值列表。

大多数
Array
方法将数组视为任意秩(“数据立方体”)的一般“张量”,因此您需要考虑方向。在一般情况下,有
cat(a,b;dims)
,其中
hcat
vcat
是特例

还有另一类方法将
Vector
s处理为类似列表的。从中,
append
是一种将向量附加到另一个向量的方法。问题是它是可变的。因此,您可以,例如,
append!(复制(a),b)
,或者使用类似的方法(不过,这只是在内部选择了正确的方法)

对于要连接两个以上向量的情况,我喜欢

reduce(append!, (a, b), init=Int[])
你可以写

[a; b]
在引擎盖下,这与
vcat
相同,但它更简洁,看起来更好,更容易记住,因为它也与文字矩阵构造语法一致

连接多个向量的另一种方法是

reduce(vcat, (a, b))

[a;b]
进行向量连接。@DNF这很有效,也很优雅,你能把这个评论变成一个答案,让它更直观吗?它只是
vcat
的同义词,不过:cf.
Meta.@lower[a;b]
@phipsgabler是的,但命名/语法似乎是这里的问题,我个人也更喜欢这个版本,而不是“降低”版本。重复添加似乎比
vcat
效率低得多,因为预分配必要的存储是不可能的,这意味着除非您
sizehint,否则将有许多不必要的分配init
参数。我认为
reduce
应该使用
append更有效,因为您仅使用加倍策略调整一个向量实例的大小,该策略具有恒定的摊销复杂性,并将导致对数上的许多中间重新分配。使用
vcat
它每次都会创建一个新副本。但我根本没试过。。。