Snažím se realizovat nějaký výpočet, ale nemůžu přijít na to, jak vectorize můj kód, a ne pomocí smyčky.
Dovolte mi vysvětlit: mám matrix M[N,C]
buď 0
nebo 1
. Další matice Y[N,1]
obsahující hodnoty [0,C-1]
(Mé třídy). Další matice ds[N,M]
což je můj dataset.
Můj výstup je matice velikosti grad[M,C]
a měla by být vypočtena následovně: já ti to vysvětlím pro grad[:,0]
, stejnou logiku pro jakýkoli jiný sloupec.
Pro každý řádek(vzorek), v ds
pokud Y[that sample] != 0
(Aktuální sloupec výstupní matice) a M[that sample, 0] > 0
pak grad[:,0] += ds[that sample]
Pokud Y[that sample] == 0
pak grad[:,0] -= (ds[that sample] * <Num of non zeros in M[that sample,:]>
)
Tady je můj iterativní přístup:
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