numpy儲存加載資料
- 1.儲存為二進制檔案(.npy/.npz)
-
- numpy.save
- numpy.savez
- numpy.savez_compressed
- 2.儲存到文本檔案
-
- numpy.savetxt
- numpy.loadtxt
1.儲存為二進制檔案(.npy/.npz)
numpy.save
儲存一個數組到一個二進制的檔案中,儲存格式是.npy
參數介紹
numpy.save(file, arr, allow_pickle=True, fix_imports=True)
file:檔案名/檔案路徑
arr:要存儲的數組
allow_pickle:布爾值,允許使用Python pickles儲存對象數組(可選參數,預設即可)
fix_imports:為了友善Pyhton2中讀取Python3儲存的資料(可選參數,預設即可)
import numpy as np
#生成資料
x=np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#資料儲存
np.save('save_x',x)
#讀取儲存的資料
np.load('save_x.npy')
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
numpy.savez
這個同樣是儲存數組到一個二進制的檔案中,但是厲害的是,它可以儲存多個數組到同一個檔案中,儲存格式是.npz,它其實就是多個前面np.save的儲存的npy,再通過打包(未壓縮)的方式把這些檔案歸到一個檔案上,不行你去解壓npz檔案就知道了,裡面是就是自己儲存的多個npy.
參數介紹
*file:檔案名/檔案路徑
args:要存儲的數組,可以寫多個,如果沒有給數組指定Key,Numpy将預設從’arr_0’,'arr_1’的方式命名
kwds:(可選參數,預設即可)
python3開始,npz加載後為對象,不能直接使用。
import numpy as np
#生成資料
x=np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
y=np.sin(x)
y
array([ 0. , 0.84147098, 0.90929743, 0.14112001, -0.7568025 ,
-0.95892427, -0.2794155 , 0.6569866 , 0.98935825, 0.41211849])
#資料儲存
np.save('save_xy',x,y)
#讀取儲存的資料
npzfile=np.load('save_xy.npz')
npzfile #是一個對象,無法讀取
<numpy.lib.npyio.NpzFile object at 0x7f63ce4c8860>
#按照組數預設的key進行通路
npzfile['arr_0']
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
npzfile['arr_1']
array([ 0. , 0.84147098, 0.90929743, 0.14112001, -0.7568025 ,
-0.95892427, -0.2794155 , 0.6569866 , 0.98935825, 0.41211849])
更加神奇的是,你可以不适用Numpy預設給數組的Key,而是自己給數組有意義的Key,這樣就可以不用去猜測自己加載資料是否是自己需要的.
np.savez('newsave_xy',x=x,y=y)
#讀取儲存的資料
npzfile=np.load('newsave_xy.npz')
#按照儲存時設定組數key進行通路
npzfile['x']
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
npzfile['y']
array([ 0. , 0.84147098, 0.90929743, 0.14112001, -0.7568025 ,
-0.95892427, -0.2794155 , 0.6569866 , 0.98935825, 0.41211849])
numpy.savez_compressed
這個就是在前面numpy.savez的基礎上加了壓縮,前面我介紹時尤其注明numpy.savez是得到的檔案打包,不壓縮的.這個檔案就是對檔案進行打包時使用了壓縮,可以了解為壓縮前各npy的檔案大小不變,使用該函數比前面的numpy.savez得到的npz檔案更小.
2.儲存到文本檔案
numpy.savetxt
儲存數組到文本檔案上,可以直接打開檢視檔案裡面的内容.
參數介紹
numpy.savetxt(fname, X, fmt=’%.18e’, delimiter=’ ‘, newline=’\n’, header=’’, footer=’’, comments=’# ', encoding=None)
fname:檔案名/檔案路徑,如果檔案字尾是.gz,檔案将被自動儲存為.gzip格式,np.loadtxt可以識别該格式
X:要存儲的1D或2D數組
fmt:控制資料存儲的格式
delimiter:資料列之間的分隔符
newline:資料行之間的分隔符
header:檔案頭步寫入的字元串
footer:檔案底部寫入的字元串
comments:檔案頭部或者尾部字元串的開頭字元,預設是’#’
encoding:使用預設參數
import numpy as np
#生成資料
x = y = z = np.ones((2,3))
x
array([[1., 1., 1.],
[1., 1., 1.]])
#儲存資料
np.savetxt('test.out', x)
np.savetxt('test1.out', x,fmt='%1.4e')
np.savetxt('test2.out', x, delimiter=',')
np.savetxt('test3.out', x,newline='a')
np.savetxt('test4.out', x,delimiter=',',newline='a')
np.savetxt('test5.out', x,delimiter=',',header='abc')
np.savetxt('test6.out', x,delimiter=',',footer='abc')
numpy.loadtxt
根據前面定制的儲存格式,相應的加載資料的函數也得變化.
參數介紹
numpy.loadtxt(fname, dtype=<class ‘float’>, comments=’#’, delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding=‘bytes’)*
fname:檔案名/檔案路徑,如果檔案字尾是.gz或.bz2,檔案将被解壓,然後再載入
dtype:要讀取的資料類型
comments:檔案頭部或者尾部字元串的開頭字元,用于識别頭部,尾部字元串
delimiter:劃分讀取上來值的字元串
converters:資料行之間的分隔符*
np.loadtxt('test.out')
np.loadtxt('test2.out', delimiter=',')