Python Numpy中数据的常用保存与读取方法


Posted in Python onApril 01, 2020

在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多.

下面就常用的保存数据到二进制文件和保存数据到文本文件进行介绍:

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.

参数介绍

numpy.savez(file, *args, **kwds)
file:文件名/文件路径
*args:要存储的数组,可以写多个,如果没有给数组指定Key,Numpy将默认从'arr_0','arr_1'的方式命名
kwds:(可选参数,默认即可)

使用

>>> 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文件更小.

注:函数所需参数和numpy.savez一致,用法完成一样.

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

总结

到此这篇关于Python Numpy中数据的常用保存与读取方法的文章就介绍到这了,更多相关python numpy 数据保存读取内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python+Django在windows下的开发环境配置图解
Nov 11 Python
python3.3使用tkinter开发猜数字游戏示例
Mar 14 Python
python有证书的加密解密实现方法
Nov 19 Python
Python中使用items()方法返回字典元素对的教程
May 21 Python
python中的全局变量用法分析
Jun 09 Python
python实现接口并发测试脚本
Jun 25 Python
python3连接kafka模块pykafka生产者简单封装代码
Dec 23 Python
python统计字符串中字母出现次数代码实例
Mar 02 Python
Python OrderedDict字典排序方法详解
May 21 Python
Python通过fnmatch模块实现文件名匹配
Sep 30 Python
解决pycharm不能自动保存在远程linux中的问题
Feb 06 Python
Python Pandas数据分析之iloc和loc的用法详解
Nov 11 Python
Python PyQt5整理介绍
Apr 01 #Python
django之导入并执行自定义的函数模块图解
Apr 01 #Python
在脚本中单独使用django的ORM模型详解
Apr 01 #Python
Python视频编辑库MoviePy的使用
Apr 01 #Python
python json.dumps中文乱码问题解决
Apr 01 #Python
Django Admin后台添加数据库视图过程解析
Apr 01 #Python
pyqt5中动画的使用详解
Apr 01 #Python
You might like
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
2012/02/04 PHP
php json_encode值中大括号与花括号区别
2013/09/30 PHP
php下pdo的mysql事务处理用法实例
2014/12/27 PHP
Yii核心验证器api详解
2016/11/23 PHP
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
WordPress中利用AJAX技术进行评论提交的实现示例
2016/01/12 Javascript
JavaScript数组的一些奇葩行为
2016/01/25 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
2016/11/20 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
JS实现加载和读取XML文件的方法详解
2017/04/24 Javascript
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
带你了解session和cookie作用原理区别和用法
2017/08/14 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
Js参数RSA加密传输之jsencrypt.js的使用
2020/02/07 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
flexible.js实现移动端rem适配方案
2020/04/07 Javascript
[06:42]DOTA2每周TOP10 精彩击杀集锦vol.1
2014/06/25 DOTA
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
Python查找相似单词的方法
2015/03/05 Python
Python实例一个类背后发生了什么
2016/02/09 Python
Mac 上切换Python多版本
2017/06/17 Python
Pytorch中的variable, tensor与numpy相互转化的方法
2019/10/10 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
2020/07/09 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
2021/02/18 Python
英国豪华针织品牌John Smedley的在线销售商:The Outlet by John Smedley
2018/04/08 全球购物
大三毕业自我鉴定
2014/01/15 职场文书
教导处工作制度
2014/01/18 职场文书
丧事主持词大全
2014/04/02 职场文书
部门2014年度工作总结
2014/11/12 职场文书
学校运动会加油词
2015/07/18 职场文书
2016年安全月活动总结
2016/04/06 职场文书
创业计划书之便利店
2019/09/05 职场文书