Snažím sa realizovať nejaký výpočet, ale nemôžem prísť ako vectorize moje kódu, a nie pomocou slučky.
Dovoľte mi to vysvetliť: mám matice M[N,C]
buď 0
alebo 1
. Ďalší matrix Y[N,1]
obsahujú hodnoty [0,C-1]
(Môj triedy). Ďalší matrix ds[N,M]
čo je môj dataset.
Môj výstup matice je z veľkosť grad[M,C]
a mali by sa vypočíta nasledovne: ja ti to vysvetlím na grad[:,0]
, tú istú logiku, pre iného stĺpca.
Pre každý riadok(vzorky) v ds
,, ak Y[that sample] != 0
(Aktuálny stĺpec výstup matrix) a M[that sample, 0] > 0
potom grad[:,0] += ds[that sample]
Ak Y[that sample] == 0
potom grad[:,0] -= (ds[that sample] * <Num of non zeros in M[that sample,:]>
)
Tu je môj iteračný postup:
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