2014-04-12 68 views
1

我有幾個大的.mtx(範圍從2-12 GB),我試圖在Python中加載到一個稀疏矩陣中,但它不起作用。我在同一臺機器上自己生成文件沒有錯誤,所以我在這裏完全困惑。使用scipy.io.mmread不能正常工作的mtx文件的讀取

獲取有關文件信息工作正常:

from scipy.io import mminfo,mmread 
mminfo(filename) 
>>> (8649029, 181, 110656308, 'coordinate', 'real', 'general') 

但是,如果我嘗試將文件加載到內存:

mat = mmread(filename) 

它只是掛起。等待一個小時後,我嘗試中斷內核(這是在Windows 7機器上的IPython筆記本上),但是這也會掛起,我不得不關閉筆記本電腦來停止它。我從命令行重複它,結果相似。這一次,我是用Ctrl-C能中斷,但得到了某種系統錯誤(沒有Python異常),我以前從來沒見過:

forrtl: error (200): program aborting due to control-C event 
Image    PC    Routine   Line  Source 
kernel32.dll  0000000076CC4803 Unknown    Unknown Unknown 
kernel32.dll  0000000076C8652D Unknown    Unknown Unknown 
ntdll.dll   0000000076EBC541 Unknown    Unknown Unknown 

我甚至嘗試通過Python加載Mac上的同一個文件翻譯。如果沒有關閉終端會話,這個問題也會掛起並且無法中斷。

任何想法可能發生在這裏?

回答

0

我見過類似的大文件需要很長時間才能進入scipy。當時,我考慮將它們寫成二進制文件而不是ASCII MTX格式,這將減少所需的I/O數量。請參閱Scipy I/O Cookbook,特別是標題爲「將Fortran或C數組寫入包含元數據的二進制文件」的部分。 libpny將需要鏈接英寸