1. 程式人生 > 程式設計 >python利用numpy存取檔案的方式

python利用numpy存取檔案的方式

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存取檔案的方式,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!
如果你覺得本文對你有幫助,歡迎轉載,煩請註明出處,謝謝!