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

时间:2013-01-20 03:56:22

标签: julia

将Julia中尺寸为1 * N或N * 1的Matrix {T}转换为Vector {T}的最有效方法是什么?

例如,说我有

a = [1,3,5]
b = a'

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]

3 个答案:

答案 0 :(得分: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}

6.41e-6秒#list comprehension

2.92e-7秒#vec()

答案 1 :(得分:4)

如果矩阵为squeeze1xN,我倾向于使用Nx1来执行此操作:

squeeze(ones(3, 1))
squeeze(ones(1, 3))

不确定这是否比使用vecreshape更有效。

答案 2 :(得分:1)

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)