Cómo aplanar sólo algunas dimensiones de una matriz numpy
¿Existe una manera rápida de "subaplanar" o aplanar solo algunas de las primeras dimensiones en una matriz numerosa?
Por ejemplo, dada una gran variedad 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 de la respuesta de Alexander: np.reshape puede tomar -1 como argumento, lo que significa "tamaño total de la matriz dividido por el producto de todas las demás dimensiones enumeradas":
por ejemplo, para 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 desea ir más allá de las matrices tridimensionales.
por ejemplo, para aplanar todas las dimensiones excepto 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 de mi respuesta anterior; por supuesto, también puede especificar un rango al comienzo 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)