Operaciones vectoriales con numpy

Tengo tres matrices numpy:

X: una matriz de 3073 x 49000
W: una matriz de 10 x 3073
y: un vector 49000 x 1

y contiene valores entre 0 y 9, cada valor representa una fila enW.

Me gustaría agregar la primera columna deX a la fila enW dado por el primer elemento eny. Es decir. si el primer elemento eny es 3, agregue la primera columna deX a la cuarta fila deW. Y luego agregue la segunda columna deX a la fila enW dado por el segundo elemento eny y así sucesivamente, hasta que todas las columnas deX se ha agregado a la fila enW especificado pory, lo que significa un total de 49000 filas agregadas.

W[y] += X.T no funciona para mí, porque esto no agregará más de un vector a una fila enW.

tenga en cuenta: Solo estoy buscandovectorizado soluciones Es decir. sin for-loops.

EDITAR: Para aclarar, agregaré un ejemplo con tamaños de matriz pequeños adaptados del ejemplo de Salvador Dalí a continuación.

In [1]: import numpy as np

In [2]: a, b, c = 3, 4, 5

In [3]: np.random.seed(0)

In [4]: X = np.random.randint(10, size=(b,c))

In [5]: W = np.random.randint(10, size=(a,b))

In [6]: y = np.random.randint(a, size=(c,1))

In [7]: X
Out[7]: 
array([[5, 0, 3, 3, 7],
       [9, 3, 5, 2, 4],
       [7, 6, 8, 8, 1],
       [6, 7, 7, 8, 1]])

In [8]: W
Out[8]: 
array([[5, 9, 8, 9],
       [4, 3, 0, 3],
       [5, 0, 2, 3]])

In [9]: y
Out[9]: 
array([[0],
       [1],
       [1],
       [2],
       [0]])

In [10]: W[y.ravel()] + X.T
Out[10]: 
array([[10, 18, 15, 15],
       [ 4,  6,  6, 10],
       [ 7,  8,  8, 10],
       [ 8,  2, 10, 11],
       [12, 13,  9, 10]])

In [11]: W[y.ravel()] = W[y.ravel()] + X.T

In [12]: W
Out[12]: 
array([[12, 13,  9, 10],
       [ 7,  8,  8, 10],
       [ 8,  2, 10, 11]])

El problema es conseguirAMBOS la columna 0 y la columna 4 en X se agregaron a la fila 0 en W, así como las columnas 1 y 2 en X se agregaron a la fila 1 en W.

El resultado deseado es así:

W = [[17, 22, 16, 16],
     [ 7, 11, 14, 17],
     [ 8,  2, 10, 11]]

Respuestas a la pregunta(4)

Su respuesta a la pregunta