3

我是 Python 新手,我想向它导入一个大小为 850M 的 matlab 结构。我使用“loadmat”,但出现内存错误:

return self._matrix_reader.array_from_header(header, process)
  文件“mio5_utils.pyx”,第 624 行,在 scipy.io.matlab.mio5_utils.VarReader5.array_from_header (scipy\io\matlab\mio5_utils.c:5401)
  文件“mio5_utils.pyx”,第 653 行,在 scipy.io.matlab.mio5_utils.VarReader5.array_from_header (scipy\io\matlab\mio5_utils.c:4849)
  文件“mio5_utils.pyx”,第 706 行,在 scipy.io.matlab.mio5_utils.VarReader5.read_real_complex (scipy\io\matlab\mio5_utils.c:5578)
  文件“mio5_utils.pyx”,第 424 行,在 scipy.io.matlab.mio5_utils.VarReader5.read_numeric (scipy\io\matlab\mio5_utils.c:3439)
  文件“mio5_utils.pyx”,第 360 行,在 scipy.io.matlab.mio5_utils.VarReader5.read_element (scipy\io\matlab\mio5_utils.c:3164)
  文件“streams.pyx”,第 76 行,在 scipy.io.matlab.streams.GenericStream.read_string (scipy\io\matlab\streams.c:1408)
内存错误

我在具有 3.5G RAM 的 Windows XP 上运行 python 3.2。这是我的代码:

from scipy.io import matlab as mio
mat = mio.loadmat(DIR + '/input.mat')

你能帮助我并告诉我我应该怎么做才能解决这个问题吗?

4

1 回答 1

3

您可能正在使用 32 位 Python。所有 32 位程序的最大限制(这个问题实际上与 Python 或 Scipy 无关)是 2GB --- 你在机器上安装了多少内存并不重要。实际上,由于虚拟内存碎片(根据经验,大约 800 MB 似乎是预期的),大对象的分配已经开始失败。

解决方案是使用 64 位 Python 而不是 32 位 Python。为此,您需要一个 64 位操作系统,例如 Windows 7 或 Linux。

但是,如果您坚持使用 32 位版本的 Windows XP,有一些技巧可以在 32 位系统上将 32 位内存限制提高到 3GB,这可能会有所帮助。

于 2012-11-12T09:47:57.103 回答