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 datalargo 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?

Nonetodaví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
Noneo connp.newaxeses 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
swapaxesmétodo de matrices NumPy o larollaxisfunció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/vectorestá 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ícitamentevectorpara ser en1x3lugar 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.