vectores una transpuesta multiplicar matriz matrices libreria imprimir elementos ejemplos array agregar python numpy flatten

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)