什么';将Julia中大小为1*N或N*1的矩阵{T}转换为向量{T}的最有效方法是什么?

什么';将Julia中大小为1*N或N*1的矩阵{T}转换为向量{T}的最有效方法是什么?,julia,Julia,将Julia中大小为1*N或N*1的矩阵{T}转换为向量{T}最有效的方法是什么 例如,假设我有 a = [1,3,5] b = a' a和b都属于数组{Int,2}(即矩阵{Int})。将a和b转换为类型数组{Int,1}(即向量{Int})的最有效方法是什么 一种方法是: a_vec = [x::Int for x in a] b_vec = [x::Int for x in b] 您可以使用vec()函数。它比列表理解更快,并且可以更好地根据元素的数量进行缩放;) 对于1000x1的矩

将Julia中大小为1*N或N*1的矩阵{T}转换为向量{T}最有效的方法是什么

例如,假设我有

a = [1,3,5]
b = a'
a
b
都属于
数组{Int,2}
(即
矩阵{Int}
)。将
a
b
转换为类型
数组{Int,1}
(即
向量{Int}
)的最有效方法是什么

一种方法是:

a_vec = [x::Int for x in a]
b_vec = [x::Int for x in b]
您可以使用
vec()
函数。它比列表理解更快,并且可以更好地根据元素的数量进行缩放;) 对于1000x1的矩阵:

julia> const a = reshape([1:1000],1000,1);

julia> typeof(a)
Array{Int64,2}

julia> vec_a = [x::Int for x in a];

julia> typeof(vec_a)
Array{Int64,1}

julia> vec_aII = vec(a);

julia> typeof(vec_aII)
Array{Int64,1}
6.41e-6秒#列表理解


2.92e-7秒#vec()

如果矩阵是
1xN
Nx1
,我倾向于使用
挤压

squeeze(ones(3, 1))
squeeze(ones(1, 3))
不确定这是否比使用
vec
重塑
更有效

vec()更快

const a = reshape([1:1000],1000,1);
@time vec(a);
elapsed time: 6.914e-6 seconds (184 bytes allocated)
@time squeeze(a,2);
elapsed time: 1.0336e-5 seconds (248 bytes allocated)

关于
vec
重塑
需要注意的一点是,它们与底层数组共享内存以提高性能–这就是为什么
vec
比创建新数组对象、复制内容的理解快得多的原因。因此,如果您更改
a[1]
v_aII[1]
也将更改,反之亦然,而
v_a[1]
将不受影响。很好,我不知道这个函数。从定义中可以看出,挤压必须比另一个稍微慢一点。我做了一点基准测试,我发现:挤压(m):(2.97+-2)e-6秒vec(m):(2.02+-2)e-6秒重塑(m,长度(m)):(1.72+-2)e-6秒差异非常小,但根据定义,重塑(m,长度(m))是更快的选择。