Digamos que tengo una matriz a
:
a = np.array([[1,2,3], [4,5,6]])
array([[1, 2, 3],
[4, 5, 6]])
Me gustaría convertirlo en una matriz 1D (es decir, un vector de columna):
b = np.reshape(a, (1,np.product(a.shape)))
pero esto vuelve
array([[1, 2, 3, 4, 5, 6]])
que no es lo mismo que:
array([1, 2, 3, 4, 5, 6])
Puedo tomar el primer elemento de esta matriz para convertirla manualmente en una matriz 1D:
b = np.reshape(a, (1,np.product(a.shape)))[0]
pero esto requiere que sepa cuántas dimensiones tiene la matriz original (y concatene [0] cuando se trabaja con dimensiones más altas)
¿Existe una forma independiente de las dimensiones de obtener un vector de columna / fila de un ndarray arbitrario?
ravel()
devuelve una vista, pero eso no siempre es cierto. Hay casos en los queravel()
devuelve una copia. </a.ravel()
parece ser alrededor de tres veces más rápido quea.reshape(-1)
.a.flatten()
es mucho más lento, ya que necesita hacer una copia.