附錄A 高階Numpy
A.8 高階數(shù)組輸入和輸出
?????? 在第4章中,我們熟悉了np.save和np.load,它們用于在磁盤上以二進制格式存儲數(shù)組。對于更復(fù)雜的使用譬猫,還有許多其他選項需要考慮。特別是羡疗,內(nèi)存映射有額外的好處染服,允許你處理不適合進入內(nèi)存的數(shù)據(jù)集。
A.8.1 內(nèi)存映射文件
?????? 內(nèi)存映射文件是一種與磁盤上的二進制數(shù)據(jù)交互的方法顺囊,就像它是存儲在內(nèi)存數(shù)組中一樣肌索。NumPy實現(xiàn)了一個memmap對象,它是ndarray型的特碳,允許對大型文件以小堆棧的方式進行讀取和寫入诚亚,而無須將整個數(shù)組載入內(nèi)存。此外午乓,memmap還有和內(nèi)存數(shù)組相同的方法站宗,因此可以替代很多算法中原本要填入的ndarray。
1.要創(chuàng)建一個新的內(nèi)存映射益愈,使用np.memmap并傳入文件路徑梢灭、dtype、shape和文件模式(見圖A-1)
2.每當(dāng)內(nèi)存映射超出范圍并且被垃圾收集時蒸其,任何更改都將刷新到磁盤敏释。打開已經(jīng)存在的內(nèi)存映射時,你仍然必須指定dtype和shape摸袁,因為該文件只是磁盤上沒有元數(shù)據(jù)的二進制數(shù)據(jù)塊(見圖A-2)
注:內(nèi)存映射也適用于結(jié)構(gòu)化或嵌套的dtype钥顽,如前一節(jié)所述
A.8.2 HDF5和其他數(shù)組存儲選擇
?????? PyTables和h5py是兩個為NumPy提供友好接口的Python項目,用于以高效和可壓縮的HDF5格式存儲數(shù)組數(shù)據(jù)(HDF代表分層數(shù)據(jù)格式靠汁,Hierarchical Data Format)蜂大。
?????? 你可以安全地以HDF5格式存儲數(shù)百GB或甚至上TB的數(shù)據(jù)闽铐。要了解有關(guān)在Python中使用HDF5的更多信息,我建議閱讀pandas官方在線文檔(http://pandas.pydata.org)奶浦。