将Julia中尺寸为1 * N或N * 1的Matrix {T}转换为Vector {T}的最有效方法是什么?
例如,说我有
a = [1,3,5]
b = a'
a
和b
都属于Array{Int,2}
类型(即Matrix{Int}
)。将a
和b
转换为Array{Int,1}
类型(即Vector{Int}
)的最有效方法是什么?
一种方法是:
a_vec = [x::Int for x in a]
b_vec = [x::Int for x in b]
答案 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)
如果矩阵为squeeze
或1xN
,我倾向于使用Nx1
来执行此操作:
squeeze(ones(3, 1))
squeeze(ones(1, 3))
不确定这是否比使用vec
或reshape
更有效。
答案 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)