Añadiendo un vector a las filas de la matriz en numpy
matrix (1)
Para agregar una matriz 1d a cada fila, la transmisión ya se encarga de las cosas:
mat += vec
Sin embargo, de manera más general, puede usar np.newaxis
para forzar la matriz a una forma de difusión. Por ejemplo:
mat + np.ones(3)[np.newaxis,:]
Si bien no es necesario para agregar la matriz a cada fila, esto es necesario para hacer lo mismo para la adición por columnas:
mat + np.ones(5)[:,np.newaxis]
EDITAR: como Sebastian menciona, para la adición de filas, mat + vec
ya maneja la transmisión correctamente. También es más rápido que usar np.newaxis
. He editado mi respuesta original para aclarar esto.
¿Existe una forma rápida en numpy para agregar un vector a cada fila o columna de una matriz?
Últimamente, he estado agrupando el vector al tamaño de la matriz, que puede usar mucha memoria. Por ejemplo
mat=np.arange(15)
mat.shape=(5,3)
vec=np.ones(3)
mat+=np.tile(vec, (5,1))
La otra forma en que puedo pensar es usando un bucle de python, pero los bucles son lentos:
for i in xrange(len(mat)):
mat[i,:]+=vec
¿Hay una forma rápida de hacer esto en cantidad sin tener que recurrir a las extensiones C?
Sería bueno poder virtualmente armar un vector, como una versión más flexible de la transmisión. O para poder iterar una operación por filas o por columnas, lo que casi puede hacer con algunos de los métodos ufunc.