Je suis en train de mettre en œuvre certaines de calcul, mais je ne peux pas comprendre comment vectoriser mon code et non pas à l'aide de boucles.
Je m'explique: j'ai une matrice M[N,C]
de soit 0
ou 1
. Une autre matrice Y[N,1]
contenant des valeurs de [0,C-1]
(Mes cours). Une autre matrice ds[N,M]
qui est mon jeu de données.
Ma sortie de la matrice est de taille grad[M,C]
et doit être calculé comme suit: je vais vous expliquer pour grad[:,0]
, même logique pour n'importe quelle autre colonne.
Pour chaque ligne(échantillon) dans ds
si Y[that sample] != 0
(La colonne de la matrice de sortie) et M[that sample, 0] > 0
puis grad[:,0] += ds[that sample]
Si Y[that sample] == 0
puis grad[:,0] -= (ds[that sample] * <Num of non zeros in M[that sample,:]>
)
Voici mon approche itérative:
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