Sto cercando di implementare una qualche calcolo, ma io non riesco a capire come vectorize il mio codice e non usando i loop.
Mi spiego: ho una matrice M[N,C]
di 0
o 1
. Un'altra matrice Y[N,1]
contenente i valori di [0,C-1]
(La mia classe). Un'altra matrice ds[N,M]
che è il mio set di dati.
La mia uscita matrice di dimensione grad[M,C]
e deve essere calcolato come di seguito: mi spiego meglio per grad[:,0]
, la stessa logica per qualsiasi altra colonna.
Per ogni riga(esempio) in ds
se Y[that sample] != 0
(La colonna corrente di uscita di matrix) e M[that sample, 0] > 0
poi grad[:,0] += ds[that sample]
Se Y[that sample] == 0
poi grad[:,0] -= (ds[that sample] * <Num of non zeros in M[that sample,:]>
)
Qui è il mio approccio iterativo:
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