我是Python新手,我想导入一个大小为850M的matlab结构。我使用“loadmat”但我收到内存错误:
return self._matrix_reader.array_from_header(header, process) File "mio5_utils.pyx", line 624, in scipy.io.matlab.mio5_utils.VarReader5.array_from_header (scipy\io\matlab\mio5_utils.c:5401) File "mio5_utils.pyx", line 653, in scipy.io.matlab.mio5_utils.VarReader5.array_from_header (scipy\io\matlab\mio5_utils.c:4849) File "mio5_utils.pyx", line 706, in scipy.io.matlab.mio5_utils.VarReader5.read_real_complex (scipy\io\matlab\mio5_utils.c:5578) File "mio5_utils.pyx", line 424, in scipy.io.matlab.mio5_utils.VarReader5.read_numeric (scipy\io\matlab\mio5_utils.c:3439) File "mio5_utils.pyx", line 360, in scipy.io.matlab.mio5_utils.VarReader5.read_element (scipy\io\matlab\mio5_utils.c:3164) File "streams.pyx", line 76, in scipy.io.matlab.streams.GenericStream.read_string (scipy\io\matlab\streams.c:1408) MemoryError
我在带有3.5G内存的Windows XP上运行python 3.2。这是我的代码:
from scipy.io import matlab as mio
mat = mio.loadmat(DIR + '/input.mat')
请你帮我,告诉我应该怎么做才能解决这个问题?
答案 0 :(得分:3)
您可能正在使用32位Python。所有32位程序的最大限制(这个问题实际上与Python或Scipy无关)是2GB ---你在机器上安装了多少内存并不重要。实际上,大型对象的分配在早期就开始失败,due to virtual memory fragmentation(根据经验,似乎可以预计~800 MB)。
解决方案是使用64位Python而不是32位Python。为此,您需要一个64位操作系统,如Windows 7或Linux。
但是,如果你坚持使用32位版本的Windows XP,那么在32位系统上将32位内存限制提高到3GB会有some tricks,这可能对此有所帮助。