multiplicar - transpuesta de una matriz en python numpy
Cómo aplanar solo algunas dimensiones de una matriz numpy (3)
¿Hay una manera rápida de "sub-aplanar" o aplanar solo algunas de las primeras dimensiones en una matriz numpy?
Por ejemplo, dada una matriz numpy de dimensiones (50,100,25)
, las dimensiones resultantes serían (5000,25)
Eche un vistazo a numpy.reshape .
>>> arr = numpy.zeros((50,100,25))
>>> arr.shape
# (50, 100, 25)
>>> new_arr = arr.reshape(5000,25)
>>> new_arr.shape
# (5000, 25)
# One shape dimension can be -1.
# In this case, the value is inferred from
# the length of the array and remaining dimensions.
>>> another_arr = arr.reshape(-1, arr.shape[-1])
>>> another_arr.shape
# (5000, 25)
Una ligera generalización a la respuesta de Alexander: np.reshape puede tomar -1 como argumento, lo que significa "tamaño total de la matriz dividido por producto de todas las demás dimensiones enumeradas":
por ejemplo, aplanar todas las dimensiones excepto la última:
>>> arr = numpy.zeros((50,100,25))
>>> new_arr = arr.reshape(-1, arr.shape[-1])
>>> new_arr.shape
# (5000, 25)
Una ligera generalización de la respuesta de Peter: puede especificar un rango sobre la forma de la matriz original si quiere ir más allá de las matrices tridimensionales.
por ejemplo, aplanar todas las dimensiones menos las dos últimas:
arr = numpy.zeros((3, 4, 5, 6))
new_arr = arr.reshape(-1, *arr.shape[-2:])
new_arr.shape
# (12, 5, 6)
EDITAR: Una ligera generalización a mi respuesta anterior; también puede especificar un rango al principio de la remodelación:
arr = numpy.zeros((3, 4, 5, 6, 7, 8))
new_arr = arr.reshape(*arr.shape[:2], -1, *arr.shape[-2:])
new_arr.shape
# (3, 4, 30, 7, 8)