Я пытаюсь реализовать следующее уравнение, используя редкий пакет scipy:
W = x[:,1] * y[:,1].T + x[:,2] * y[:,2].T + ...
, где x & y - это nxm csc_matrix.В основном я пытаюсь умножить каждый столбец x на каждый столбец y и сложить полученные nxn матрицы вместе.Затем я хочу сделать все ненулевые элементы равными 1.
Это моя текущая реализация:
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
Эта реализация имеет следующие проблемы:
Использование памяти, кажется, взрывается.Насколько я понимаю, память должна увеличиваться только по мере того, как c становится менее разреженным, но я вижу, что цикл начинает поглощать> 20 ГБ памяти с = 10 000, m = 100 000 (в каждой строке x & y есть только около 60ноль элементов).
Я использую цикл Python, который не очень эффективен.
Мой вопрос: есть ли лучший способсделай это?Моя первая задача - контролировать использование памяти, но было бы здорово сделать это быстрее!
Спасибо!