Numpy restar cada fila de matriz por vector

Así que tengo una matriz nxd y un vector nx 1 . Estoy tratando de escribir un código para restar cada fila en la matriz por el vector.

Actualmente tengo un bucle for que recorre y resta la fila número i en la matriz por el vector. ¿Hay una manera de simplemente restar una matriz completa por el vector?

¡Gracias!

Código actual:

 for i in xrange( len( X1 ) ): X[i,:] = X1[i,:] - X2 

Aquí es donde X1 es la i -fila de la matriz y X2 es vector. ¿Puedo hacerlo para que no necesite un bucle for ?

Eso funciona en numpy pero solo si los ejes finales tienen la misma dimensión . Aquí hay un ejemplo de cómo restar con éxito un vector de una matriz:

 In [27]: print m; m.shape [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] Out[27]: (4, 3) In [28]: print v; v.shape [0 1 2] Out[28]: (3,) In [29]: m - v Out[29]: array([[0, 0, 0], [3, 3, 3], [6, 6, 6], [9, 9, 9]]) 

Esto funcionó porque el eje posterior de ambos tenía la misma dimensión (3).

En su caso, los ejes delanteros tenían la misma dimensión. Aquí hay un ejemplo, usando la misma v que arriba, de cómo se puede arreglar:

 In [35]: print m; m.shape [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] Out[35]: (3, 4) In [36]: (m.transpose() - v).transpose() Out[36]: array([[0, 1, 2, 3], [3, 4, 5, 6], [6, 7, 8, 9]]) 

Las reglas para los ejes de transmisión se explican en profundidad aquí .

Además de la respuesta @ John1024, la “transposición” de un vector unidimensional en números puede realizarse de la siguiente manera:

 In [1]: v = np.arange(3) In [2]: v Out[2]: array([0, 1, 2]) In [3]: v = v[:, np.newaxis] In [4]: v Out[4]: array([[0], [1], [2]]) 

Desde aquí, restar v de cada columna de m es trivial utilizando la difusión:

 In [5]: print(m) [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] In [6]: m - v Out[6]: array([[0, 1, 2, 3], [3, 4, 5, 6], [6, 7, 8, 9]])