我有三个纽比阵列:

X:3073 x 49000矩阵

W:10x3073矩阵

y:一个49000×1矢量

y包含0到9之间的值,每个值代表W中的一行。在

我想将X的第一列添加到W中由{}中的第一个元素给出的行。一、 如果y中的第一个元素是3,则将X的第一列添加到W的第四行。然后将X的第二列添加到y中的第二个元素给出的W中的行,依此类推,直到X的所有列都被添加到y指定的W中的行,这意味着总共添加了49000行。在

W[y] += X.T不适用于我,因为这不会向W中的一行添加多个向量。在

请注意:我只寻找矢量化的解决方案。一、 e.没有for循环。在

编辑:为了澄清,我将添加一个小矩阵大小的示例,该示例改编自Salvador Dali下面的示例。在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]])

问题是将X中的第0列和第4列同时添加到W中的第0行,以及将X中的第1列和第2列添加到W的第1行

因此,期望的结果是:

^{pr2}$