爲什麼需要Numpy文件讀寫?

在使用Numpy處理數據時,我們經常需要臨時存儲中間結果或長期保存數據以便後續使用。例如,在機器學習項目中,訓練模型後需要保存參數;或者數據分析中,需要重複使用之前處理好的數組。Numpy提供了saveload等函數,讓我們可以輕鬆實現數組數據的持久化(即數據的存儲與讀取)。

Numpy的save與load:單個數組的持久化

1. np.save():保存單個數組到文件

np.save()用於將單個Numpy數組保存爲二進制文件(擴展名爲.npy),格式如下:

np.save(文件名, 數組)

示例

import numpy as np

# 創建一個示例數組
arr = np.array([1, 2, 3, 4, 5])

# 保存數組到文件(自動生成my_array.npy)
np.save('my_array', arr)

2. np.load():從文件加載數組

np.load()用於從.npy文件中讀取數組數據,格式如下:

np.load(文件名)

示例

# 加載保存的數組
loaded_arr = np.load('my_array.npy')

# 驗證數組內容是否一致
print("原數組:", arr)
print("加載後的數組:", loaded_arr)
print("數組是否相同:", np.array_equal(arr, loaded_arr))  # 輸出 True

關鍵點:文件擴展名

  • np.save()會自動爲文件添加.npy擴展名(即使你不寫),例如np.save('data', arr)生成data.npy
  • 加載時需確保文件路徑正確,且文件已存在。

Numpy的savez:多個數組的持久化

當需要同時保存多個數組時,使用np.savez(),它會將多個數組壓縮到一個.npz文件中。

1. np.savez():保存多個數組

np.savez(文件名, 數組1=數組1, 數組2=數組2, ...)

示例

# 創建兩個數組
arr1 = np.array([1, 2, 3])
arr2 = np.array([[4, 5, 6], [7, 8, 9]])

# 保存多個數組到my_arrays.npz(鍵名分別爲'arr1'和'arr2')
np.savez('my_arrays', arr1=arr1, arr2=arr2)

2. np.load():加載多個數組

加載.npz文件時,返回一個類似字典的對象,可通過數組名(鍵名)訪問各個數組。

示例

# 加載多個數組
loaded_data = np.load('my_arrays.npz')

# 查看所有數組名
print("數組名:", loaded_data.files)  # 輸出 ['arr1', 'arr2']

# 通過鍵名訪問數組
print("arr1:", loaded_data['arr1'])
print("arr2:", loaded_data['arr2'])

對比:savezsave

  • save僅能保存單個數組,適合簡單場景。
  • savez可保存多個數組,適合數據分組存儲(如模型參數+數據標籤)。

實戰示例:數據處理全流程

場景:保存並加載實驗數據

import numpy as np

# 1. 生成模擬數據
data1 = np.random.rand(100)  # 100個隨機數
data2 = np.random.randn(50, 50)  # 50x50隨機正態分佈數組

# 2. 保存數據
np.save('data1.npy', data1)
np.savez('data2_50x50.npz', matrix=data2)

# 3. 後續使用時加載
loaded_data1 = np.load('data1.npy')
loaded_data2 = np.load('data2_50x50.npz')['matrix']

# 4. 數據分析
print("data1的均值:", np.mean(loaded_data1))
print("data2的形狀:", loaded_data2.shape)
print("data2的最大值:", np.max(loaded_data2))

補充:文本格式保存(savetxt/loadtxt)

如果需要將數組保存爲純文本(如CSV格式),可使用np.savetxt()np.loadtxt()

# 保存爲CSV(逗號分隔)
np.savetxt('data.csv', data1, delimiter=',')

# 加載文本文件
loaded_csv = np.loadtxt('data.csv', delimiter=',')

注意:文本格式適合人類可讀,但二進制格式(.npy/.npz)更高效,且能保留數據類型。

總結

  • 單個數組:用np.save()np.load(),生成.npy文件。
  • 多個數組:用np.savez()np.load(),生成.npz文件。
  • 文本格式:用savetxt()loadtxt(),適合CSV等簡單場景。

通過本文,你已掌握Numpy數據持久化的核心方法,可靈活應對數組的存儲與讀取需求。

小夜