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

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

1.保存为二进制文件(.npy/.npz)

numpy.save

保存一个数组到一个二进制的文件中,保存格式是.npy

参数介绍

  1. numpy.save(file, arr, allow_pickle=True, fix_imports=True)

file:文件名/文件路径

arr:要存储的数组

allow_pickle:布尔值,允许使用Python pickles保存对象数组(可选参数,默认即可)

fix_imports:为了方便Pyhton2中读取Python3保存的数据(可选参数,默认即可)

使用

  1. >>> import numpy as np
  2. #生成数据
  3. >>> x=np.arange(10)
  4. >>> x
  5. array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
  6. #数据保存
  7. >>> np.save('save_x',x)
  8. #读取保存的数据
  9. >>> np.load('save_x.npy')
  10. array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

numpy.savez

这个同样是保存数组到一个二进制的文件中,但是厉害的是,它可以保存多个数组到同一个文件中,保存格式是.npz,它其实就是多个前面np.save的保存的npy,再通过打包(未压缩)的方式把这些文件归到一个文件上,不行你去解压npz文件就知道了,里面是就是自己保存的多个npy.

参数介绍

  1. numpy.savez(file, *args, **kwds)

file:文件名/文件路径

*args:要存储的数组,可以写多个,如果没有给数组指定Key,Numpy将默认从'arr_0','arr_1'的方式命名

kwds:(可选参数,默认即可)

使用

  1. >>> import numpy as np
  2. #生成数据
  3. >>> x=np.arange(10)
  4. >>> x
  5. array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
  6. >>> y=np.sin(x)
  7. >>> y
  8. array([ 0. , 0.84147098, 0.90929743, 0.14112001, -0.7568025 ,
  9. -0.95892427, -0.2794155 , 0.6569866 , 0.98935825, 0.41211849])
  10. #数据保存
  11. >>> np.save('save_xy',x,y)
  12. #读取保存的数据
  13. >>> npzfile=np.load('save_xy.npz')
  14. >>> npzfile #是一个对象,无法读取
  15. <numpy.lib.npyio.NpzFile object at 0x7f63ce4c8860>
  16. #按照组数默认的key进行访问
  17. >>> npzfile['arr_0']
  18. array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
  19. >>> npzfile['arr_1']
  20. array([ 0. , 0.84147098, 0.90929743, 0.14112001, -0.7568025 ,
  21. -0.95892427, -0.2794155 , 0.6569866 , 0.98935825, 0.41211849])

更加神奇的是,你可以不适用Numpy默认给数组的Key,而是自己给数组有意义的Key,这样就可以不用去猜测自己加载数据是否是自己需要的.

  1. #数据保存
  2. >>> np.savez('newsave_xy',x=x,y=y)
  3. #读取保存的数据
  4. >>> npzfile=np.load('newsave_xy.npz')
  5. #按照保存时设定组数key进行访问
  6. >>> npzfile['x']
  7. array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
  8. >>> npzfile['y']
  9. array([ 0. , 0.84147098, 0.90929743, 0.14112001, -0.7568025 ,
  10. -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

保存数组到文本文件上,可以直接打开查看文件里面的内容.

参数介绍

  1. 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:使用默认参数

使用

  1. >>> import numpy as np
  2. #生成数据
  3. >>> x = y = z = np.ones((2,3))
  4. >>> x
  5. array([[1., 1., 1.],
  6. [1., 1., 1.]])
  7. #保存数据
  8. np.savetxt('test.out', x)
  9. np.savetxt('test1.out', x,fmt='%1.4e')
  10. np.savetxt('test2.out', x, delimiter=',')
  11. np.savetxt('test3.out', x,newline='a')
  12. np.savetxt('test4.out', x,delimiter=',',newline='a')
  13. np.savetxt('test5.out', x,delimiter=',',header='abc')
  14. np.savetxt('test6.out', x,delimiter=',',footer='abc')

保存下来的文件都是友好的,可以直接打开看看有什么变化.

numpy.loadtxt

根据前面定制的保存格式,相应的加载数据的函数也得变化.

参数介绍

  1. 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:数据行之间的分隔符

.......后面不常用的就不写了

使用

  1. np.loadtxt('test.out')
  2. np.loadtxt('test2.out', delimiter=',')

Python Numpy中数据的常用的保存与读取方法的更多相关文章

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

    小书匠 深度学习  文章目录: 1.保存为二进制文件(.npy/.npz) numpy.save numpy.savez numpy.savez_compressed 2.保存到文本文件 numpy. ...

  2. Numpy中数据的常用的保存与读取

    保存到文本文件numpy.savetxt()numpy.loadtxt() import numpy as np x= np.arange(0,10,0.1) np.savetxt('save_x', ...

  3. Python/Numpy大数据编程经验

    Python/Numpy大数据编程经验 1.边处理边保存数据,不要处理完了一次性保存.不然程序跑了几小时甚至几天后挂了,就啥也没有了.即使部分结果不能实用,也可以分析程序流程的问题或者数据的特点.   ...

  4. 在python&numpy中切片(slice)

     在python&numpy中切片(slice) 上文说到了,词频的统计在数据挖掘中使用的频率很高,而切片的操作同样是如此.在从文本文件或数据库中读取数据后,需要对数据进行预处理的操作.此时就 ...

  5. JavaScript中,有三种常用的绑定事件的方法

    要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数.所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称. 在JavaScript中,有三种常用的 ...

  6. Python numpy 中常用的数据运算

    Numpy 精通面向数组编程和思维方式是成为Python科学计算大牛的一大关键步骤.——<利用Python进行数据分析> Numpy(Numerical Python)是Python科学计 ...

  7. Python numpy中矩阵的用法总结

    关于Python Numpy库基础知识请参考博文:https://www.cnblogs.com/wj-1314/p/9722794.html Python矩阵的基本用法 mat()函数将目标数据的类 ...

  8. python numpy中sum()时出现负值

    import numpy a=numpy.random.randint(1, 4095, (5000,5000)) a.sum() 结果为负值, 这是错误的,a.sum()的类型为 int32,如何做 ...

  9. Java中几种常用数据类型之间转换的方法

    Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...

随机推荐

  1. 文件的概念、标准IO其一

    1.文件的概念 文件是一种存储在磁盘(掉电不丢失存储设备)上,掉电不丢失的一种存储数据的方式,文件在系统中有以下层次的结构来实现. 系统调用.文件IO.标准IO的关系如下: 2.linux系统的文件分 ...

  2. windows driver 创建线程

    VOID ThreadStart(_In_ PVOID StartContext) { PWCHAR str = (PWCHAR)StartContext; MySleep(10);//延时10ms ...

  3. export环境变量

    /etc/profile和/etc/profile.d/区别 [root@zzx conf]# vim /etc/profile.d/tomcat.sh   添加如下内容再运行脚本就可以添加环境变量 ...

  4. 关于torch.nn.Linear的笔记

    关于该类: torch.nn.Linear(in_features, out_features, bias=True) 可以对输入数据进行线性变换: $y  = x A^T + b$ in_featu ...

  5. 路飞学城—Python爬虫实战密训班 第二章

    路飞学城—Python爬虫实战密训班 第二章 一.Selenium基础 Selenium是一个第三方模块,可以完全模拟用户在浏览器上操作(相当于在浏览器上点点点). 1.安装 - pip instal ...

  6. tensorflow---darknet53

    #! /usr/bin/env python# coding=utf-8#=============================================================== ...

  7. NOI2019退役记

    Day0 时光荏苒,日月如梭.人生中第二次也是最后一次全国赛开始了. 坐6h高铁+1h大巴来到gzez,热死.室友是A类的Gloid和C类的仓鼠,我寝室是为数不多(或许只有1个)的凑齐了ABC三种类别 ...

  8. Z0J 3772 Calculate the Function 线段树+矩阵

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5235 这种题目居然没想到,一开始往矩阵快速幂想去了,因为之前跪了太多矩阵快速幂 ...

  9. mysql 启动报错Host name could not be resolved解决办法

    mysql 启动报错信息如下: [root@xxx ~]# 2018-01-26 17:06:35 33 [Warning] Host name 'bogon' could not be resolv ...

  10. Codeforces Round #622 (Div. 2)C2 Skyscrapers最大"尖"性矩形,思维||分治

    题:https://codeforces.com/contest/1313/problem/C2 题意:给出n个数,分别代表第i个位置所能搭建的最大高度,问以哪一个位置的塔的高度为基准向左的每一个塔都 ...