天天看點

numpy儲存加載資料1.儲存為二進制檔案(.npy/.npz)2.儲存到文本檔案

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=',')