26

将 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]
4

3 回答 3

38

您可以使用该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 seconds # 列表理解

2.92e-7 秒 # vec()

于 2013-01-20T15:50:23.397 回答
4

squeeze如果矩阵是1xNor ,我会倾向于这样做Nx1

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

不确定这是否比使用vecor更有效reshape

于 2013-01-20T22:20:30.580 回答
3

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)
于 2015-03-16T16:50:35.090 回答