Python

Numpy之数据保存与读取

2020-03-14  本文已影响0人  山阴少年

  在pandas使用的25个技巧中介绍了几个常用的Pandas的使用技巧,不少技巧在机器学习和深度学习方面很有用处。本文将会介绍Numpy在数据保存和读取方面的内容,这些在机器学习和深度学习方向也大有用处,因为通常我们会采用Numpy和Pandas处理数据,尤其是Pytorch,它和Numpy的结合更为紧密。
  我们先介绍Numpy的几个函数:

numpy.savez(file, *args, **kwds)
file:文件名/文件路径
*args:要存储的数组,可以写多个,如果没有给数组指定Key,Numpy将默认从'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

# 创建1000*1000的矩阵,元素为0-1之间的随机数
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函数最多只能保存2维矩阵,3维以上就会报错,rand_matrix.txt中的部分内容如下:


rand_matrix.txt

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


文件大小
可以看到,用savez_compressed保存的文件会比savez保存的文件小,这是因为该函数在文件打包时进行了压缩。
  接着是读取npz文件中的内容,我们以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的相关信息
print(mat.shape)
print(mat[:5, :5])

输出内容如下:

(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

# 创建1000*1000的矩阵,元素为0-1之间的随机数
matrix = np.random.rand(1000, 1000)

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

生成的文件大小如下:


生成的pickle

可以发现生成的pickle文件和numpy中的savez函数保存的文件大小一样。
  本次分享到此结束,感谢大家阅读~

上一篇下一篇

猜你喜欢

热点阅读