当前位置: 首页 > news >正文

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

在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为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 #是一个对象,无法读取

#按照组数默认的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=" ", 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=, 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 数据保存读取内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章:

  • ERP项目为何总是与成功失之交臂
  • ctrl v不能复制粘贴了 怎么处理_PDF怎么转换成Word?就是这么简单
  • javascript基础教程_JavaScript基础教程(七)函数的编写与使用
  • 爱的距离 ---"千里之外"
  • win7开机慢_[Windows] 【老旧电脑的福音】WIN10LTSB2015开机7秒
  • Mozilla Firefox 提高速度的方法
  • 电脑卡反应慢怎么处理_如果电脑不能读取SD卡怎么办
  • 一个批量更改文件名的Python脚本
  • iphone开机白苹果_苹果iPhone6s开机白苹果进不去是怎么回事?
  • win10命令提示符怎么打开_技巧,win10蓝屏SYSTEM_PTE_MISUSE怎么解决
  • be confident of/in/with应该如何区分?
  • xgboost算法_【模型篇】XGBoost模型
  • sqlserver2000内存突破4g_荣耀Play4T系列发布:麒麟810加持! 4G时代的终结者
  • 我的垃圾培训造就众多高中学历者高薪就业
  • hdmi接口有什么用_当贝投影仪HDMI(ARC)接口是什么意思?
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 10个确保微服务与容器安全的最佳实践
  • express.js的介绍及使用
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • leetcode388. Longest Absolute File Path
  • Next.js之基础概念(二)
  • Python爬虫--- 1.3 BS4库的解析器
  • React-Native - 收藏集 - 掘金
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • spring学习第二天
  • vue学习系列(二)vue-cli
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 动态规划入门(以爬楼梯为例)
  • 构建二叉树进行数值数组的去重及优化
  • ------- 计算机网络基础
  • 京东美团研发面经
  • 力扣(LeetCode)965
  • 排序(1):冒泡排序
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 收藏好这篇,别再只说“数据劫持”了
  • 白色的风信子
  • ionic异常记录
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • #### go map 底层结构 ####
  • #1014 : Trie树
  • #HarmonyOS:Web组件的使用
  • #pragma预处理命令
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • #前后端分离# 头条发布系统
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (阿里云万网)-域名注册购买实名流程
  • (备忘)Java Map 遍历
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (转)Unity3DUnity3D在android下调试
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器