Векторные операции с NumPy

У меня есть три массива:

X: матрица 3073 x 49000
W: матрица 10 x 3073
y: вектор 49000 x 1

y содержит значения от 0 до 9, каждое значение представляет строку вW.

Я хотел бы добавить первый столбецX в рядW определяется первым элементом вy, То есть если первый элемент вy 3, добавьте первый столбецX до четвертого рядаW, А затем добавить второй столбецX в рядW дано вторым элементом вy и так далее, пока все столбцыX был добавлен в строку вW определяетсяy, что означает в общей сложности 49000 добавленных строк.

W[y] += X.T не работает для меня, потому что это не добавит более одного вектора к строке вW.

пожалуйста, обратите внимание: Я только ищуВекторизованных решения. То есть нет для петель.

РЕДАКТИРОВАТЬ: Для пояснения я добавлю пример с матрицами небольшого размера, адаптированный из приведенного ниже примера Сальвадора Дали.

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]])

Проблема в том, чтобы получитьИ ТО И ДРУГОЕ столбец 0 и столбец 4 в X добавлены в строку 0 в W, а также столбцы 1 и 2 в X добавлены в строку 1 в W.

Таким образом, желаемый результат:

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

Ответы на вопрос(4)

Ваш ответ на вопрос