在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为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怎么读取txt文件数据保存数组中-Python Numpy中数据的常用的保存与读取方法...相关推荐

  1. python怎么读取txt文件并统计其字数-python读写excel等数据文件方法汇总

    python处理数据文件第一步是要读取数据,文件类型主要包括文本文件(csv.txt等).excel文件.数据库文件.api等. 下面整理下python有哪些方式可以读取数据文件. 1. python ...

  2. python怎么读取txt文件并统计其字数-python计算文件的行数和读取某一行内容的实现方法...

    一.计算文件的行数 最简单的办法是把文件读入一个大的列表中,然后统计列表的长度.如果文件的路径是以参数的形式filepath传递的,那么只用一行代码就可以完成我们的需求了: count = len(o ...

  3. python怎么创建txt文件啊_搞定Python项目依赖:requirements.txt文件的创建和使用

    Python的强大在于它拥有数量众多的第三方库协助开发,在编写Python项目时,我们经常会使用很多第三方模块.由于不同设备和系统的差异性,导致我们很难分散地控制项目依赖(头铁的同学请绕道),于是re ...

  4. 想搞定大厂面试官?java读取txt文件并存入数组

    一.码场心得 你是个能吃苦的人吗? 从前的能吃苦大多指的体力劳动的苦,但现在的能吃苦已经包括太多维度,包括:读书学习&寂寞的苦.深度思考&脑力的苦.自律习惯&修行的苦.自控能力 ...

  5. readmemh函数引用的txt格式_memory - 在Verilog中,我尝试使用$ readmemb来读取.txt文件,但它仅在内存中加载xxxxx(不必担心) - 堆栈内存溢出...

    您确定要运行模拟吗? 您的TB代码: module RAM_IN (pix_val, indx); input [0:5] indx; output [31:0] pix_val; reg [31:0 ...

  6. python读取txt为dataframe_python批量读取txt文件为DataFrame格式的方法总结

    python怎么批量读取txt文件为DataFrame格式 这次给大家带来python怎么批量读取txt文件为DataFrame格式,python批量读取txt文件为DataFrame格式的注意事项有 ...

  7. python读取txt文件时去除换行符

    python读取txt文件时去除换行符 python的readlines()方法用于读取所有行,且返回值是一个列表,换行符包含在字符串中. f = open("temp.txt", ...

  8. IDL读取TXT文件出现 READF: End of file encountered. Unit: l, File: H: 错误

    IDL读取TXT文件出现 READF: End of file encountered. Unit: l, File: H: 错误 1.出现原因 出现错误图 在读取txt文件时出现这个错误,研究了一天 ...

  9. java读取文件是乱码_java读取txt文件乱码解决方案

    因为txt默认的选项是ANSI,即GBK编码.GBK和GB2312都是中文编码,在这里解释一下两者的区别. 总体说来,GBK包括所有的汉字,包括简体和繁体.而gb2312则只包括简体汉字. GBK: ...

  10. java读取txt文件乱码解决方案

    因为txt默认的选项是ANSI,即GBK编码.GBK和GB2312都是中文编码,在这里解释一下两者的区别. 总体说来,GBK包括所有的汉字,包括简体和繁体.而gb2312则只包括简体汉字. GBK: ...

最新文章

  1. 03JavaScript中的数据类型
  2. ganglia安装与配置
  3. 【白话机器学习】算法理论+实战之K-Means聚类算法
  4. 牛客题霸 NC4 判断链表中是否有环
  5. Spark:使用partitionColumn选项读取数据库原理
  6. laravel redis_Redis 之服务器集群配置
  7. C和指针之字符串编程练习1
  8. Lanchester战争模型:用可分离变量的微分方程占卜战事
  9. 【引用】Java开发者的十大戒律
  10. 2021年Java开发者应该学习的技术
  11. 【数据分享】某产品付费用户数据
  12. 【企业信息化】信息化与企业信息化管理的相关概念及关系
  13. MySQL多表查询,SQL,笛卡尔积等值连接自连接外连接,SQL99新特性,完整详细可收藏
  14. 转专业选择计算机的理由,转专业面试自我介绍范文
  15. STM32L476低功耗—进入STOP2模式4s后LPTIM中断唤醒+功率实测
  16. 无线鼠标 跨计算机控制,终于明白无线鼠标如何设置
  17. 一款小游戏集合自动脚本
  18. Balsamiq Mockups 产品原型图绘制工具的破解和使用教程
  19. 最终幻想13-2时钟迷题破解工具
  20. 复古儿童卡通温馨手绘风格趣味MOGRT图形动画标题pr模板

热门文章

  1. linux 更改ctime_linux常用命令
  2. css3.0动画,CSS3.0实现霓虹灯按钮动画特效的示例代码
  3. 计算阶比分析 matlab_(案例)层次聚类分析Matlab编码计算
  4. java collections_【Java视频教程】day31-集合练习??
  5. 搭建Android上的服务器 “实现隔空取物”
  6. JD boto3 flask 上传 demo
  7. Linux Shell 截取字符串
  8. 利用目录服务器实现单点登录
  9. JavaScript——ES6新特性
  10. UITabBarController 笔记(三) UITabBarController 配合 UINavigationController 的使用