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

Ben*_*ner 22 julia

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

例如,说我有

a = [1,3,5]
b = a'
Run Code Online (Sandbox Code Playgroud)

两个ab的类型的Array{Int,2}(即,Matrix{Int}).转换ab输入Array{Int,1}(即Vector{Int})的最有效方法是什么?

一种方法是:

a_vec = [x::Int for x in a]
b_vec = [x::Int for x in b]
Run Code Online (Sandbox Code Playgroud)

Die*_*Zea 30

你可以使用这个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}
Run Code Online (Sandbox Code Playgroud)

6.41e-6秒#list comprehension

2.92e-7秒#vec()

  • 关于`vec`和`reshape`的一个重要注意事项是它们与底层数组共享内存以提高性能 - 这就是为什么`vec`比理解更快,后者创建一个新的数组对象,复制内容.因此,如果你改变'a [1]`,`v_aII [1]`也会改变,反之亦然,而`v_a [1]`将不受影响. (12认同)

小智 5

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)
Run Code Online (Sandbox Code Playgroud)