2017-10-28 85 views
2

摘要:我有一個帶有905 x 905 x 762個元素的3D FLOAT數組。它存儲在IDL保存文件中,該文件無法用scipy.io.readsav讀取。當我將這個數組的一部分(905 x 905 x 600個元素或更少)存儲在另一個IDL保存文件中時,此時scipy.io.readsav可以正常工作。是否有可以用scipy.io.readsav讀取的最大文件大小限制?

這是我做的讀取任何這兩個文件的內容:

from scipy.io import readsav 
filename = 'datacube.sav' 
sav = readsav(filename, verbose=True) 

這是當我讀到了更大的IDL保存文件,我得到的錯誤:

/Users/moncho/Codes/miniconda3/lib/python3.5/site-packages/scipy/io/idl.py:473: UserWarning: Using experimental 64-bit array read 
warnings.warn("Using experimental 64-bit array read") 
Traceback (most recent call last): 

File "<ipython-input-1-c6753cefbd81>", line 1, in <module> runfile('/Users/moncho/Data/untitled7.py', wdir='/Users/moncho/Data') 
File "/Users/moncho/Codes/miniconda3/lib/python3.5/site-packages/spyder/utils/site/sitecustomize.py", line 710, in runfile 
execfile(filename, namespace) 
File "/Users/moncho/Codes/miniconda3/lib/python3.5/site-packages/spyder/utils/site/sitecustomize.py", line 101, in execfile 
exec(compile(f.read(), filename, 'exec'), namespace) 
File "/Users/moncho/Data/untitled7.py", line 11, in <module> 
sav = readsav(filename, verbose=True) 
File "/Users/moncho/Codes/miniconda3/lib/python3.5/site-packages/scipy/io/idl.py", line 799, in readsav 
r = _read_record(f) 
File "/Users/moncho/Codes/miniconda3/lib/python3.5/site-packages/scipy/io/idl.py", line 360, in _read_record 
rectypedesc['array_desc']) 
File "/Users/moncho/Codes/miniconda3/lib/python3.5/site-packages/scipy/io/idl.py", line 284, in _read_array 
array = np.fromstring(f.read(array_desc['nbytes']), 

OSError: [Errno 22] Invalid argument 

我運行在Mac OS X 10.11.6上使用python 3.5。任何想法都表示讚賞。謝謝!

回答

0

加載文件取決於系統中可用的可用內存量。驗證您是否有足夠的可用內存。之前曾經遇到類似的情況 - 我能夠在2.7 OS X中使用scipy加載大文件,但不能在3.5中加載。在2.7中嘗試readsav。這是一個錯誤。

+0

Rane謝謝你的回答。我已經檢查了內存問題,這裏不是問題,所以也許這是一個錯誤,正如你提到的那樣。我對python非常陌生,所以我需要檢查如何運行python 2.7。現在我只安裝了3.5。 –

相關問題