Necesito una manera eficiente de remar estandarizar una matriz dispersa.Fila eficientemente Estandarizar una matriz
Dado
W = matrix([[0, 1, 0, 1, 0, 0, 0, 0, 0],
[1, 0, 1, 0, 1, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 1, 0, 0, 0],
[1, 0, 0, 0, 1, 0, 1, 0, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0],
[0, 0, 1, 0, 1, 0, 0, 0, 1],
[0, 0, 0, 1, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 1, 0, 1, 0, 1],
[0, 0, 0, 0, 0, 1, 0, 1, 0]])
row_sums = W.sum(1)
que necesito para producir ...
W2 = matrix([[0. , 0.5 , 0. , 0.5 , 0. , 0. , 0. , 0. , 0. ],
[0.33, 0. , 0.33, 0. , 0.33, 0. , 0. , 0. , 0. ],
[0. , 0.5 , 0. , 0. , 0. , 0.5 , 0. , 0. , 0. ],
[0.33, 0. , 0. , 0. , 0.33, 0. , 0.33, 0. , 0. ],
[0. , 0.25, 0. , 0.25, 0. , 0.25, 0. , 0.25, 0. ],
[0. , 0. , 0.33, 0. , 0.33, 0. , 0. , 0. , 0.33],
[0. , 0. , 0. , 0.5 , 0. , 0. , 0. , 0.5 , 0. ],
[0. , 0. , 0. , 0. , 0.33, 0. , 0.33, 0. , 0.33],
[0. , 0. , 0. , 0. , 0. , 0.5 , 0. , 0.5 , 0. ]])
Cuando,
for i in range(9):
W2[i] = W[i]/row_sums[i]
Me gustaría encontrar una manera de hacer esto sin bucles (es decir, Vectorizado) y usando matrices Scipy.sparse. W podría ser tan grande a 10mil x 10mil.
Me acabo de dar cuenta si W es densa (una matriz numpy regular). W2 = W/W.sum (1) funciona bien. Pero las dispersas matrices de scipy no parecen apoyar la división. – Charles
No veo una forma de hacerlo que no sea implementar esta división en código C y llamar desde Python. ¿El W.sum para matriz dispersa funciona bien? – jsbueno
Sí, W.sum (1) en el disperso devuelve un vector de sumas de fila. – Charles