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)]