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