julia lang - array - ¿Cuál es la forma más eficiente de convertir una Matriz{T} de tamaño 1*N o N*1 en Julia a un Vector{T}?
array julia (3)
¿Cuál es la forma más eficiente de convertir una Matriz {T} de tamaño 1 * N o N * 1 en Julia a un Vector {T}?
Por ejemplo, digamos que tengo
a = [1,3,5]
b = a''
Tanto a
como b
son de tipo Array{Int,2}
(es decir, Matrix{Int}
). ¿Cuáles son las formas más eficientes de convertir a
y b
para escribir Array{Int,1}
(es decir, Vector{Int}
)?
Un enfoque es:
a_vec = [x::Int for x in a]
b_vec = [x::Int for x in b]
Puedes usar la función vec()
. Es más rápido que la lista de comprensión y se escala mejor con el número de elementos;) Para una matriz de 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 segundos # lista de comprensión
2.92e-7 segundos # vec ()
Tendría que usar squeeze
para hacer esto si la matriz es 1xN
o Nx1
:
squeeze(ones(3, 1))
squeeze(ones(1, 3))
No estoy seguro si eso es más eficiente que usar vec
o reshape
.
vec () es más rápido
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)