Каков наиболее эффективный способ преобразования матрицы {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]
Ответы
Ответ 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)