Încerc să pună în aplicare unele calcule, dar eu nu pot da seama cum să vectorize codul meu și nu folosind bucle.
Permiteți-mi să explic: am un matrix M[N,C]
fie 0
sau 1
. O altă matrice Y[N,1]
conțin valori de [0,C-1]
(Clasa mea). O altă matrice ds[N,M]
care este setul de date.
Mea ieșire este matricea de dimensiune grad[M,C]
și ar trebui să fie calculat după cum urmează: voi explica pentru grad[:,0]
, aceeași logică pentru orice altă coloană.
Pentru fiecare rând(eșantion) în ds
dacă Y[that sample] != 0
(Actuală coloana de ieșire matrice) și M[that sample, 0] > 0
atunci grad[:,0] += ds[that sample]
Dacă Y[that sample] == 0
atunci grad[:,0] -= (ds[that sample] * <Num of non zeros in M[that sample,:]>
)
Aici este meu de abordare iterativă:
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