Numpy之?dāng)?shù)據(jù)保存與讀取

??在pandas使用的25個技巧中介紹了幾個常用的Pandas的使用技巧,不少技巧在機器學(xué)習(xí)和深度學(xué)習(xí)方面很有用處。本文將會介紹Numpy在數(shù)據(jù)保存和讀取方面的內(nèi)容,這些在機器學(xué)習(xí)和深度學(xué)習(xí)方向也大有用處,因為通常我們會采用Numpy和Pandas處理數(shù)據(jù),尤其是Pytorch,它和Numpy的結(jié)合更為緊密。
??我們先介紹Numpy的幾個函數(shù):

numpy.savez(file, *args, **kwds)
file:文件名/文件路徑
*args:要存儲的數(shù)組,可以寫多個,如果沒有給數(shù)組指定Key,Numpy將默認(rèn)從'arr_0','arr_1'的方式命名

numpy.savez_compressed
使用辦法和numpy.savez一樣,但是保存的文件會有壓縮,可以減小文件大小。

numpy.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ', encoding=None)
保存為txt文件,fname為文件名稱,X為numpy中的變量,fmt為保存格式,delimiter為分隔符。

??我們的示例Python代碼如下:

# -*- coding: utf-8 -*-
# author: Jclian91
# place: Pudong Shanghai
# time: 2020/3/14 15:14
import numpy as np

# 創(chuàng)建1000*1000的矩陣,元素為0-1之間的隨機數(shù)
matrix = np.random.rand(1000, 1000)

# 使用save_z和save_compressed保存maxtrix
np.savez("rand_matrix", matrix=matrix)
np.savez_compressed("rand_matrix_compressed", matrix=matrix)

# 保存為txt格式
np.savetxt("rand_matrix.txt", matrix, fmt="%.6f", delimiter=",")

需要注意的是,savetxt函數(shù)最多只能保存2維矩陣,3維以上就會報錯,rand_matrix.txt中的部分內(nèi)容如下:


rand_matrix.txt

我們看一下保存的文件大小:


文件大小

可以看到,用savez_compressed保存的文件會比savez保存的文件小,這是因為該函數(shù)在文件打包時進行了壓縮。
??接著是讀取npz文件中的內(nèi)容,我們以rand_matrix.npz為例,示例代碼如下:
# -*- coding: utf-8 -*-
# author: Jclian91
# place: Pudong Shanghai
# time: 2020/3/14 15:39
import numpy as np

# 讀取npz文件
mat = np.load("rand_matrix.npz")["matrix"]

# 輸出mat的相關(guān)信息
print(mat.shape)
print(mat[:5, :5])

輸出內(nèi)容如下:

(1000, 1000)
[[0.92338524 0.08321306 0.60686435 0.57764367 0.93594528]
 [0.10552397 0.98878422 0.5237701  0.03220633 0.85022735]
 [0.06755187 0.18767634 0.24769326 0.83413499 0.69020446]
 [0.20900975 0.47176702 0.9302718  0.47056681 0.76258641]
 [0.46927451 0.72896195 0.50372099 0.58216099 0.58198673]]

??最后,我們將numpy中的矩陣保存為pickle文件,示例代碼如下:

# -*- coding: utf-8 -*-
# author: Jclian91
# place: Pudong Shanghai
# time: 2020/3/14 15:45
import numpy as np
import pickle

# 創(chuàng)建1000*1000的矩陣,元素為0-1之間的隨機數(shù)
matrix = np.random.rand(1000, 1000)

# 保存為pickle文件
with open("rand_matrix.pk", "wb") as f:
    pickle.dump(matrix, f)

生成的文件大小如下:


生成的pickle

可以發(fā)現(xiàn)生成的pickle文件和numpy中的savez函數(shù)保存的文件大小一樣。
??本次分享到此結(jié)束,感謝大家閱讀~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。