Julia-将向量组合到矩阵中

Julia-将向量组合到矩阵中,julia,Julia,假设我有两个向量x=[1,2]和y=[3,4]。如何在Julia编程语言中最好地组合它们以获得矩阵m=[12;34]?提前感谢您的支持。我知道有两种方法: julia> x = [1,2]; julia> y = [3,4]; julia> vcat(x', y') 2×2 Array{Int64,2}: 1 2 3 4 julia> permutedims(hcat(x, y)) 2×2 Array{Int64,2}: 1 2 3 4 请注意,在vca

假设我有两个向量
x=[1,2]
y=[3,4]
。如何在Julia编程语言中最好地组合它们以获得矩阵
m=[12;34]
?提前感谢您的支持。

我知道有两种方法:

julia> x = [1,2];
julia> y = [3,4];
julia> vcat(x', y')
2×2 Array{Int64,2}:
 1  2
 3  4
julia> permutedims(hcat(x, y))
2×2 Array{Int64,2}:
 1  2
 3  4
请注意,在
vcat(x',y')
中,操作
x'
是伴随的,因此,如果您使用的是未定义伴随的复数或向量元素(例如字符串),则不应使用该操作。因此,应该使用
permutedims
,但它在分配时会变慢。第三种方法是(无可否认,打字更麻烦):

它像
[x';y']
一样是非分配的,但不做递归伴随

编辑:

卡梅隆注意:

julia> x = repeat(string.('a':'z'), 10^6);

julia> @btime $x';
  1.199 ns (0 allocations: 0 bytes)

julia> @btime reshape($x, 1, :);
  36.455 ns (2 allocations: 96 bytes)
因此,
restrape
分配,但只分配最少(它需要创建一个数组对象,而
x'
创建一个不需要分配的不可变结构)

我还认为这是一个分配的设计决策。至于
isbitsunion
types实际上
reformate
返回一个结构,因此它不会分配(类似于范围):


还有一个选项-此选项适用于数字和其他对象,如
String
s:

julia> rotl90([y x])
2×2 Array{Int64,2}:
 1  2
 3  4
那怎么办

vcat(transpose(x), transpose(y))


当我做
x=string时('a':'z')@b时间重塑($x,1,:)它似乎在分配<代码>整形
不为范围分配,但似乎为数组分配。
整形(x,1,:)
分配,但仅为最小值;我想说的是,在大多数情况下,差异应该可以忽略不计。您也可以使用
PermutedDimsArray
来避免在
permutedims
中分配。哇-有趣的是,这样一个基本问题提供了这么多选项。请注意,对于像我这样的未来困惑读者:该函数不是拼写错误,也不是
rot180
;它向
l
eft旋转
90度。
julia> rotl90([y x])
2×2 Array{Int64,2}:
 1  2
 3  4
vcat(transpose(x), transpose(y))
[transpose(x); transpose(y)]