我试图实施一些计算,但是我不知道如何矢量化我的代码而不使用循环。
让我解释一下:我有一个矩阵 M[N,C]
任 0
或 1
. 另一个矩阵 Y[N,1]
含有价值的 [0,C-1]
(我的类)。 另一个矩阵 ds[N,M]
这是我的数据集。
我的输出矩阵的大小 grad[M,C]
和应计算如下:我要解释 grad[:,0]
,同样的逻辑,任何其他柱。
为每个行(样本)在 ds
,如果 Y[that sample] != 0
(当前列出的矩阵)和 M[that sample, 0] > 0
然后 grad[:,0] += ds[that sample]
如果 Y[that sample] == 0
然后 grad[:,0] -= (ds[that sample] * <Num of non zeros in M[that sample,:]>
)
这里是我的迭代方法:
for i in range(M.size(dim=1)):
for j in range(ds.size(dim=0)):
if y[j] == i:
grad[:,i] = grad[:,i] - (ds[j,:].T * sum(M[j,:]))
else:
if M[j,i] > 0:
grad[:,i] = grad[:,i] + ds[j,:].T