python利用numpy存取檔案的方式
阿新 • • 發佈:2020-01-09
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,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到了另外一種好的儲存資料的方式
總結
以上所述是小編給大家介紹的python利用numpy存取檔案的方式,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!
如果你覺得本文對你有幫助,歡迎轉載,煩請註明出處,謝謝!