Numpy IO 操作
ndarray 對象可以保存到磁盤文件并從磁盤文件加載。常用的 IO 函數(shù)有:
- load() 和 save() 函數(shù)是讀寫文件數(shù)組數(shù)據(jù)的兩個主要函數(shù),默認情況下,數(shù)組是以未壓縮的原始二進制格式保存在擴展名為 .npy 的文件中;
- savez() 函數(shù)用于將多個數(shù)組寫入文件,默認情況下,數(shù)組是以未壓縮的原始二進制格式保存在擴展名為 .npz 的文件中;
- loadtxt() 和 savetxt() 函數(shù)處理正常的文本文件(txt等文本文件);
1. npz文件的保存與讀取
1.1 numpy.save 函數(shù)
numpy.save() 函數(shù)將數(shù)組保存到以 .npy 為擴展名的文件中。函數(shù)原型如下:
numpy.save(file, arr, allow_pickle=True, fix_imports=True)
參數(shù)說明如下:
參數(shù) | 說明 |
---|---|
file | 要保存的文件,擴展名為 .npy,如果文件路徑末尾沒有擴展名 .npy,該擴展名會被自動加上 |
arr | 要保存的數(shù)組 |
allow_pickle | 可選,布爾值,允許使用 Python pickles 保存對象數(shù)組,Python 中的 pickle 用于在保存到磁盤文件或從磁盤文件讀取之前,對對象進行序列化和反序列化。 |
fix_imports | 可選,為了方便 Pyhton2 中讀取 Python3 保存的數(shù)據(jù)。 |
案例
定義數(shù)組:
a = np.array([1, 2, 3, 4, 5, 6])
將數(shù)組保存到 outfile_a.npy 文件上:
np.save('outfile_a.npy', a)
如果你嘗試打開 outfile_a.npy 文件,你會發(fā)現(xiàn)文件是亂碼的,因為它們是 Numpy 專用的二進制格式后的數(shù)據(jù)。
1.2 numpy.savez 函數(shù)
numpy.savez 函數(shù)可以將多個數(shù)組保存到以 npz 為擴展名的文件中。函數(shù)原型如下是:
numpy.savez(file, *args, **kwds)
參數(shù)說明如下:
參數(shù) | 說明 |
---|---|
file | 要保存的文件,擴展名為 .npy,如果文件路徑末尾沒有擴展名 .npy,該擴展名會被自動加上 |
args | 要保存的數(shù)組 |
kwds | 要保存的數(shù)組使用關(guān)鍵字名稱 |
案例
定義數(shù)組:
b = np.array([11, 22, 33, 44, 55, 66])
c = np.array([10, 20, 30, 40, 50, 60])
將數(shù)組 a、b、c 保存到 outfile_abc.npz 文件上:
np.savez('outfile_abc.npz', a, b, arr_1d = c)
1.3 numpy.load函數(shù)
numpy.load 函數(shù)可以加載 .npy 或 .npz 文件,將數(shù)組還原。
案例
從 outfile_a.npy 文件中還原數(shù)組 a:
a_re = np.load('outfile_a.npy')
print(a_re)
還原結(jié)果為:
[1 2 3 4 5 6]
案例
從 outfile_abc.npz 文件中還原數(shù)組 a、b、c:
abc_re = np.load('outfile_abc.npz')
print(abc_re)
打印還原結(jié)果為:
<numpy.lib.npyio.NpzFile at 0x1be73ece550>
NpzFile 是一個 Numpy 提供的類似字典的對象,可以通過鍵值對進行訪問:
print('NpzFile的對象名稱為:')
for name in abc_re.keys():
print(name)
結(jié)果為:
NpzFile的對象名稱為:
arr_1d
arr_0
arr_1
可以看到 .npz 文件中保存了 3 個 key,其中 arr_1d 是自定義的,arr_0 和 arr_1 是程序默認的。可以詳細查看 key 對應(yīng)的 value:
print('arr_1d:', abc_re['arr_1d'])
print('arr_0:', abc_re['arr_0'])
print('arr_1:', abc_re['arr_1'])
結(jié)果為:
arr_1d: [10 20 30 40 50 60]
arr_0: [1 2 3 4 5 6]
arr_1: [11 22 33 44 55 66]
觀察發(fā)現(xiàn):arr_0 和 arr_1 分別對應(yīng) a 和 b。
2. 文本文件的保存與讀取
2.1 numpy.savetxt 函數(shù)
numpy.savetxt() 函數(shù)是以簡單的文本文件格式存儲數(shù)據(jù)。其函數(shù)原型為:
np.savetxt(file, arr, fmt="%d", delimiter=",")
參數(shù)說明如下:
參數(shù) | 說明 |
---|---|
file | 要保存的文件 |
arr | 要保存的數(shù)組 |
fmt | 指定數(shù)組元素的保存格式 |
delimiter | 指定每行元素之間的分隔符 |
案例
將二維數(shù)組保存為本文文件,數(shù)據(jù)存儲格式為整數(shù),分隔符為‘,’:
arr = np.arange(16).reshape(4,4)
np.savetxt('outfile_2d.txt', arr, fmt='%d', delimiter=',')
找到 outfile_2d.txt 文件,雙擊打開,結(jié)果為:
0,1,2,3
4,5,6,7
8,9,10,11
12,13,14,15
2.2numpy.loadtxt 函數(shù)
numpy.loadtxt() 函數(shù)是從文本文件中恢復(fù)數(shù)組數(shù)據(jù)。其函數(shù)原型為:
np.loadtxt(file, dtype=int, delimiter=' ')
參數(shù)說明如下:
參數(shù) | 說明 |
---|---|
file | 要讀取的文件 |
dtype | 指定數(shù)組元素的格式 |
delimiter | 指定文本文件的分隔符 |
案例
從 outfile_2d.txt 文件中還原二維數(shù)組:
np.loadtxt('outfile_2d.txt', dtype=np.int32, delimiter=',')
out:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
3. 小結(jié)
本節(jié)講述了Numpy提供文件保存與讀取的常用操作。其中save()、savez()與load()是基于二進制文件的IO操作,savetxt()與loadtxt()是基于文本文件的IO操作,在使用過程中注意區(qū)分。