As funções ravel () e flatten () do numpy são duas técnicas que eu tentaria aqui. Gostaria de acrescentar às postagens feitas por Joe , Siraj , bubble e Kevad .
Ravel:
A = M.ravel()
print A, A.shape
>>> [1 2 3 4] (4,)
Achatar:
M = np.array([[1], [2], [3], [4]])
A = M.flatten()
print A, A.shape
>>> [1 2 3 4] (4,)
numpy.ravel()
é mais rápido , pois é uma função no nível da biblioteca que não faz nenhuma cópia da matriz. No entanto, qualquer alteração na matriz A será transferida para a matriz original M se você estiver usandonumpy.ravel()
.
numpy.flatten()
é mais lento quenumpy.ravel()
. Mas se você está usando numpy.flatten()
para criar A, em seguida, muda em um não vai ter transitado para a matriz M originais .
numpy.squeeze()
e M.reshape(-1)
são mais lentos que numpy.flatten()
e numpy.ravel()
.
%timeit M.ravel()
>>> 1000000 loops, best of 3: 309 ns per loop
%timeit M.flatten()
>>> 1000000 loops, best of 3: 650 ns per loop
%timeit M.reshape(-1)
>>> 1000000 loops, best of 3: 755 ns per loop
%timeit np.squeeze(M)
>>> 1000000 loops, best of 3: 886 ns per loop