Estoy tratando de poner en práctica la siguiente ecuación usando el paquete de escasa scipy:suma la realización de los productos exteriores de matrices dispersas
W = x[:,1] * y[:,1].T + x[:,2] * y[:,2].T + ...
donde x & y son una csc_matrix nxm. Básicamente estoy tratando de multiplicar cada col de x por cada col de y y sumar las matrices nxn resultantes. entonces yo quiero que todos los elementos no nulos 1.
Ésta es mi implementación actual:
c = sparse.csc_matrix((n, n))
for i in xrange(0,m):
tmp = bam.id2sym_thal[:,i] * bam.id2sym_cort[:,i].T
minimum(tmp.data,ones_like(tmp.data),tmp.data)
maximum(tmp.data,ones_like(tmp.data),tmp.data)
c = c + tmp
Esta aplicación tiene los siguientes problemas:
uso de memoria parece explotar. Según tengo entendido, la memoria solo debería aumentar a medida que c se vuelve menos dispersa, pero estoy viendo que el ciclo comienza a consumir> 20GB de memoria con un = 10,000, m = 100,000 (cada fila de x & y solo tiene alrededor de 60 cero elementos).
Estoy usando un bucle de python que no es muy eficiente.
Mi pregunta: ¿Hay una mejor manera de hacerlo? Controlar el uso de la memoria es mi principal preocupación, ¡pero sería genial hacerlo más rápido!
¡Gracias!
'x [:, i]' se van a darle la columna de orden i del 'x', no la fila – JoshAdel
@JoshAdel: Tienes razón, me equivoqué, que quería decir multiplicar las columnas de X por columnas de y He actualizado la pregunta. ¡Gracias! – RussellM
Su ecuación es una suma de productos internos, no productos externos. Debe transponer las columnas de 'y', no' x'. (O eso, o el título es incorrecto.) –