Supongamos que tengo una matriz numpy:
data = np.array([[1,1,1],[2,2,2],[3,3,3]])
y tengo un "vector" correspondiente
vector = np.array([1,2,3])
¿Cómo opero a lo data
largo de cada fila para restar o dividir para que el resultado sea:
sub_result = [[0,0,0], [0,0,0], [0,0,0]]
div_result = [[1,1,1], [1,1,1], [1,1,1]]
En pocas palabras: ¿Cómo realizo una operación en cada fila de una matriz 2D con una matriz 1D de escalares que corresponden a cada fila?
None
todavía funciona de manera equivalente anp.newaxis
. No estoy seguro de cuál es su configuración o del problema exacto que está experimentando, pero la respuesta sigue siendo válida.Como se ha mencionado, cortar con
None
o connp.newaxes
es una excelente manera de hacer esto. Otra alternativa es utilizar transposiciones y radiodifusión, como eny
Para matrices de mayor dimensión, es posible que desee utilizar el
swapaxes
método de matrices NumPy o larollaxis
función NumPy . Realmente hay muchas formas de hacer esto.Para obtener una explicación más completa de la transmisión, consulte http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
fuente
La solución de JoshAdel usa np.newaxis para agregar una dimensión. Una alternativa es usar reshape () para alinear las dimensiones en preparación para la transmisión .
La realización de reshape () permite que las dimensiones se alineen para la transmisión:
Tenga en cuenta que
data/vector
está bien, pero no le da la respuesta que desea. Divide cada columna dearray
(en lugar de cada fila ) por cada elemento correspondiente devector
. Es lo que obtendría si cambiara la forma explícitamentevector
para ser en1x3
lugar de3x1
.fuente
La forma pitónica de hacer esto es ...
Esto se encarga de la remodelación y también los resultados están en formato de punto flotante. En otras respuestas, los resultados están en formato de entero redondeado.
#NOTA: El número de columnas en los datos y el vector debe coincidir
fuente
Agregando a la respuesta de stackoverflowuser2010, en el caso general solo puede usar
Esto convertirá su vector en un
column matrix/vector
. Permitiéndole realizar las operaciones de elemento como desee. Al menos para mí, esta es la forma más intuitiva de hacerlo y dado que (en la mayoría de los casos) numpy solo usará una vista de la misma memoria interna para la remodelación, también es eficiente.fuente
.reshape(-1,1)
es la forma más intuitiva de utilizar la transmisión.