Векторные операции с NumPy
У меня есть три массива:
X
: матрица 3073 x 49000W
: матрица 10 x 3073y
: вектор 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]]