Bazı hesaplamaları uygulamaya çalışıyorum, ancak kodumu nasıl vektörize edeceğimi ve döngüler kullanmayacağımı anlayamıyorum.
Açıklamama izin verin: Bir matrisim var M[N,C]
ikisinden de 0
veya 1
. Başka bir matris Y[N,1]
değerleri içeren [0,C-1]
(Derslerim). Başka bir matris ds[N,M]
bu benim veri kümem.
Çıktı matrisim boyuttadır grad[M,C]
ve aşağıdaki gibi hesaplanmalıdır: Açıklayacağım grad[:,0]
başka bir sütun için aynı mantık.
Her satır için(örnek) ds
, eğer Y[that sample] != 0
(Çıkış matrisinin geçerli sütunu) ve M[that sample, 0] > 0
, sonraları grad[:,0] += ds[that sample]
Eğer Y[that sample] == 0
, sonraları grad[:,0] -= (ds[that sample] * <Num of non zeros in M[that sample,:]>
)
İşte benim yinelemeli yaklaşımım:
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