Подтвердить что ты не робот

Каков наиболее эффективный способ преобразования матрицы {T} размера 1 * N или N * 1 в Julia в вектор {T}?

Какой наиболее эффективный способ преобразования матрицы {T} размера 1 * N или N * 1 в Julia в вектор {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]
4b9b3361

Ответ 1

Вы можете использовать функцию 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()

Ответ 2

Я хотел бы использовать squeeze для этого, если матрица 1xN или Nx1:

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

Не уверен, что это более эффективно, чем использование vec или reshape.

Ответ 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)