2012-11-12 68 views
3

我是Python的新手,我想導入一個大小爲850M的matlab結構體。我使用「loadmat」,但我得到一個內存錯誤:loadmat python內存錯誤

 
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 

我在Windows XP上運行python 3.2與3.5G的RAM。這裏是我的代碼:

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

你能幫我,告訴我該怎麼做才能解決這個問題嗎?

回答

3

您可能正在使用32位Python。所有32位程序的最大限制(這個問題事實上與Python或Scipy無關)爲2GB ---您在計算機上安裝的內存數量無關緊要。在實踐中,大對象的分配開始早已失敗,due to virtual memory fragmentation(根據經驗,似乎預計〜800MB)。

解決方案是使用64位Python而不是32位。爲此,您需要一個64位操作系統,例如Windows 7或Linux。但是,如果您堅持使用32位版本的Windows XP,則有3236位內存限制在32位系統上升級到3GB,這可能對此有所幫助。