Я пытаюсь перевернуть большую (150000,150000)
разреженной матрицы следующим образом:SciPy разреженные инвертировать или spsolve приводят к UMFPACK_ERROR_OUT_OF_MEMORY
import scipy as sp
import scipy.sparse.linalg as splu
#Bs is a large sparse matrix with shape=(150000,150000)
#calculating the sparse inverse
iBs=splu.inv(Bs)
приводит к следующему сообщению об ошибке:
Traceback (most recent call last):
iBs=splu.inv(Bs)
File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/dsolve/linsolve.py", line 134, in spsolve
autoTranspose=True)
File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/dsolve/umfpack/umfpack.py", line 603, in linsolve
self.numeric(mtx)
File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/dsolve/umfpack/umfpack.py", line 450, in numeric
umfStatus[status]))
RuntimeError: <function umfpack_di_numeric at 0x7f2c76b1d320> failed with UMFPACK_ERROR_out_of_memory
Я быстро восстановлен программе просто решить систему линейных дифференциальных уравнений:
import numpy as np
N=Bs.shape[0]
I=np.ones(N)
M=splu.spsolve(Bs,I)
a d Я снова столкнулся с той же ошибкой
Я использовал этот код на машине с 16 ГБ ОЗУ, а затем переместил ее на сервер с 32 ГБ ОЗУ, но все же безрезультатно.
Кто-нибудь сталкивался с этим раньше?
У меня такая же проблема на ПК под управлением Linux Mint 17.3 с 64 ГБ ОЗУ. Я проверил, что максимальное потребление штока было меньше 20,3 Гб, поэтому я предполагаю, что существует некоторый предел потребления памяти, связанный с проблемой программного обеспечения ... Я проверил «ulimit» «неограниченно» ... Не знаю, что там делать ... – Alain
Возможно, было бы неплохо добавить, что это похоже на специфику Linux, я успешно выполнил тот же самый код в Windows 7 (обе системы с Python 2.7 64 бит). – Alain
Я нашел эту ссылку, в которой упоминается возможная перестройка UMFPACK (http://scicomp.stackexchange.com/questions/7973/memory-management-for-solving-large-sparse-systems-with-umfpack). Но я не знаю, что с этим делать. – Alain