Eu estou tentando implementar algumas cálculo, mas eu não consigo entender como vectorize meu código e não usando loops.
Deixe-me explicar: eu tenho uma matriz M[N,C]
de qualquer 0
ou 1
. Outra matriz Y[N,1]
contendo valores de [0,C-1]
(Meus cursos). Outra matriz ds[N,M]
qual é o meu conjunto de dados.
A minha saída é matriz de tamanho grad[M,C]
e deve ser calculado como a seguir: eu vou explicar para grad[:,0]
, mesmo lógica para qualquer outra coluna.
Para cada linha(exemplo) em ds
, se Y[that sample] != 0
(A coluna atual de saída matrix) e M[that sample, 0] > 0
e , em seguida, grad[:,0] += ds[that sample]
Se Y[that sample] == 0
e , em seguida, grad[:,0] -= (ds[that sample] * <Num of non zeros in M[that sample,:]>
)
Aqui está a minha abordagem iterativa:
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