爲什麼需要Numpy文件讀寫?¶
在使用Numpy處理數據時,我們經常需要臨時存儲中間結果或長期保存數據以便後續使用。例如,在機器學習項目中,訓練模型後需要保存參數;或者數據分析中,需要重複使用之前處理好的數組。Numpy提供了save和load等函數,讓我們可以輕鬆實現數組數據的持久化(即數據的存儲與讀取)。
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'])
對比:savez與save¶
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數據持久化的核心方法,可靈活應對數組的存儲與讀取需求。