NumPy提供了多種存取陣列內容的檔案操作函式,保存陣列資料的檔案可以是二進制格式或者文本格式,二進制格式的檔案又分為NumPy專用的格式化二進制型別和無格式型別,
numpy格式的檔案可以保存為后綴為(.npy/.npz)格式的檔案
1. tofile()和fromfile()
- tofile()將陣列中的資料以二進制格式寫進檔案
- tofile()輸出的資料不保存陣列形狀和元素型別等資訊
- fromfile()函式讀回資料時需要用戶指定元素型別,并對陣列的形狀進行適當的修改
import numpy as np
# 隨機生成12個數字并將其有一維轉換成3*4的矩陣形式
a = np.arange(12)
print("一維陣列:",a)
a.shape = 3,4
print("3*4的矩陣:",a)
# 將陣列中的資料以二進制格式寫入到檔案
a.tofile('a.bin')
# fromfile在讀取numpy檔案時需要自己指定資料格式,并且原格式并為保存
b1 = np.fromfile('a.bin', dtype=np.float) # 按照float讀取資料
b2 = np.fromfile('a.bin', dtype=np.int) # 按照int讀取資料
b3 = np.fromfile('a.bin', dtype=np.int32) # 按照int32讀取資料
print('float格式b1:{},\nint格式b2:{},\nint32格式b3:{}'.format(b1,b2,b3))
b3.shape = 3,4
print('b3:',b3)

2. save() 和 load(),savez()
- NumPy專用的二進制格式保存資料,它們會自動處理元素型別和形狀等資訊
- 如果想將多個陣列保存到一個檔案中,可以使用savez()
- savez()的第一個引數是檔案名,其后的引數都是需要保存的陣列,也可以使用關鍵字引數為陣列起名
- 非關鍵字引數傳遞的陣列會自動起名為arr_0、arr_1、...,
- savez()輸出的是一個擴展名為npz的壓縮檔案,其中每個檔案都是一個save()保存的npy檔案,檔案名和陣列名相同
- load()自動識別npz檔案,并且回傳一個類似于字典的物件,可以通過陣列名作為鍵獲取陣列的內容
import numpy as np
a = np.arange(12)
a.shape = 3,4
# 將資料存盤為npy/npz
np.save('a.npy', a)
np.save('a.npz', a)
c = np.load('a.npy')
print('save-load:',c)
# 存盤多個陣列
b1 = np.array([[6, 66, 666],[888, 88,8]])
b2 = np.arange(0, 1.0, 0.1)
c2 = np.sin(b2)
np.savez('result.npz', b1,b2,sin_arry = c)
c3 = np.load('result.npz') # npz檔案時一個壓縮檔案
print(c3)
print("陣列b1:{}\n陣列b2:{}\n陣列sin_arry:{}".format(c3['arr_0'],c3['arr_1'],c3['sin_arry']))

3. savetxt() 和 loadtxt()
- 讀寫1維和2維陣列的文本檔案
- 可以用它們讀寫CSV格式的文本檔案
用這種方式來對資料進行存盤,方便深度學習中, 保存了訓練集,驗證集,測驗集,還包括他們的標簽,用這個方式存盤起來,要啥加載啥,檔案數量大大減少,也不會到處改檔案名,算是get到了另外一種好的存盤資料的方式
參考:https://www.cnblogs.com/wushaogui/p/9142019.html
https://www.cnblogs.com/dmir/p/5009075.html
大家可以關注我和我小伙伴的公眾號~~~這里有我和我的小伙伴不定時的更新一些python技術資料哦!!大家也可以留言,討論一下技術問題,希望大家多多支持,關注一下啦,謝謝大家啦~~

???????
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/224265.html
標籤:其他
