Numpy能夠讀寫磁盤上的文本數(shù)據(jù)或者二進制數(shù)據(jù)。這里只討論numpy的內(nèi)置二進制格式,因為更多的用戶會使用pandas或其他工具來加載文本或者表格數(shù)據(jù)。
np.save與np.load函數(shù)是讀取磁盤數(shù)組數(shù)據(jù)的兩個主要函數(shù)。默認情況下,數(shù)組是以未壓縮的原始二進制格式保存在擴展名為.npy的文件中的:
In [213]: arr = np.arange(10)
In [214]: np.save('some_array', arr)
可以看到,文件路徑末尾沒有擴展名.npy也沒有關系,最后保存的時候擴展名會被自動加上。保存就是為了以后讀取的(不是用來刪著玩的),然后就可以用np.load讀取磁盤上的數(shù)組了:
In [215]: np.load('some_array.npy')
Out[215]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
通過np.savez可以將多個數(shù)組保存到一個未壓縮文件中(這里的后綴為.npz),將數(shù)組以關鍵字參數(shù)的形式傳入即可:
In [216]: np.savez('array_archive.npz', a=arr, b=arr)
加載.npz文件時,你會得到一個類似字典的對象,該對象會對各個數(shù)組進行延遲加載:
In [217]: arch = np.load('array_archive.npz')
In [218]: arch['b']
Out[218]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
延遲加載是什么意思?
延遲加載(lazyload)又稱懶加載,類似隨用隨取的意思,當需要使用的時候再加載出來?,F(xiàn)在許多網(wǎng)頁、app也采用懶加載的形式,只有當scroll滾動條滑動到指定位置,才對某些占資源的文件如圖片進行加載。
如果要將數(shù)據(jù)壓縮,可以使用numpy.savez_compressed:
In [219]: np.savez_compressed('arrays_compressed.npz', a=arr, b=arr)
更新完畢,哈哈~哈
文章代碼引用自:《利用Python進行數(shù)據(jù)分析·第2版》第4章 NumPy基礎:數(shù)組和矢量計算
作者:SeanCheney
感謝SeanCheney同意引用。