Вот код:
# input:
# A : a large csr matrix (365 million rows and 1.3 billion entries), 32 bit float datatype
# get the two largest eigenvalues of A and the corresponding eigenvectors
from scipy.sparse.linalg import eigsh
(w,V) = eigsh(A,k=2,tol=10e-2,ncv=5)
Насколько я могу сказать, здесь не так много места, чтобы возиться, но я наблюдаю, что у моей машины изначально достаточно памяти(90G включая swap), но использование памяти eigsh медленно увеличивается во время выполнения, пока у меня не кончится память.Есть ли что-то очевидное, чего мне здесь не хватает?
Что я пробовал:
- Просмотр источника.Это много, но, насколько я мог видеть, между кодами python между итерациями не выделяется память.Я не так хорош в Фортране, но было бы неожиданно, если бы ARPACK или вызывающая подпрограмма выделяли память.
- Пробовал эквивалентную вещь в Octave (клон MATLAB), с похожими эффектами, хотя и менее очевидным, посколькутип данных обязательно имеет двойную точность и поэтому он более ограничен с самого начала.Так что, возможно, это может быть что-то с самим ARPACK?
- Гуглил кучу.Похоже, что Сципи где-то использовал (делал?) Круговую ссылку, что вызывало у других горе при многократном вызове eigsh, но я звоню один раз, так что, возможно, это не та проблема.
Любая помощьБуду очень признателен.