Estoy tratando de implementar algunos de cálculo, pero no puedo entender cómo vectorizar mi código y no mediante bucles.
Me explico: tengo una matriz M[N,C]
de cualquiera de las 0
o 1
. Por otra matriz Y[N,1]
contiene los valores de [0,C-1]
(Mis clases). Por otra matriz ds[N,M]
cual es mi conjunto de datos.
Mi salida de la matriz es de tamaño grad[M,C]
y debe ser calculado como sigue: voy a explicar para grad[:,0]
, la lógica misma de cualquier otra columna.
Para cada fila(de la muestra) en ds
si Y[that sample] != 0
(La columna actual de salida de la matriz) y M[that sample, 0] > 0
, a continuación, grad[:,0] += ds[that sample]
Si Y[that sample] == 0
, a continuación, grad[:,0] -= (ds[that sample] * <Num of non zeros in M[that sample,:]>
)
Aquí está mi enfoque 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