本文的主要内容是基于中国大学mooc(慕课)中的“Python数据分析与可视化”课程进行整理和总结。

a.tofile()和np.fromfile()

a.tofile(frame,sep=’’,format=’%s’)
frame:文件或者字符串;
sep:数据分割字符串,如果是空串,写入文件为二进制;
format:写入文件的格式;

a = np.arange(100).reshape(5,10,2)
a.tofile('b.dat',sep=',',format='%d')


可以看到生成的是由“,”分隔的序列文件,与CSV不同,该文件不包含任何的维度信息,只是将数组中的所有元素逐一列出,并输出到这个文件中,若不指定分隔符,会得到什么样的结果呢?

a = np.arange(100).reshape(5,10,2)
a.tofile('c.dat',format='%.1f')


此时生成的是二进制格式文件,打开后无法使用文本编辑器看懂,事实上,二进制文件会比文本文件占用更少的空间,此时可将二进制文件作为数据备份的一种方式。

如何从文本文件或者二进制文件中还原一个Numpy数组呢?可以使用如下函数命令。
np.fromfile(frame,dtype=float,count=-1,sep=’’)
frame:文件或者字符串的表示;
dtype:读取元素使用的数据类型;
count:读入元素的个数,-1表示读入整个文件;
sep:读入数据的分隔字符串,如果是空串,写入文件为二进制;

a = np.arange(100).reshape(5,10,2)
a.tofile('b.dat',sep=',',format='%d')
c = np.fromfile('b.dat',sep=',',dtype=np.int)
c
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])
c = np.fromfile('b.dat',sep=',',dtype=np.int).reshape(5,10,2)
array([[[ 0,  1],[ 2,  3],[ 4,  5],[ 6,  7],...,[94, 95],[96, 97],[98, 99]]])

在使用np.fromfile方法生成新的数组,会发现新的数组c与原数组a维度并不一样,维度信息丢失,此时需要使用reshape指定新生成数组的维度。如果使用二进制文件生成新的数组会怎么样呢?

a  = np.arange(100).reshape(5,10,2)
a.tofile('b.dat',format='%d')
c = np.fromfile('b.dat',dtype=np.int,count=-1).reshape(5,10,2)
c
array([[[ 0,  1],[ 2,  3],[ 4,  5],[ 6,  7],...,[94, 95],[96, 97],[98, 99]]])

可以发现,当存入和读取数据文件时,都设定sep为默认时,二进制文件也能通过fromfile方法正确读入numpy数组。除此之外,需要注意使用该方法读取文件时,a.tofile和np.fromfile需要配合使用,同时需要知道存入文件时数组的维度信息和元素类型,可以通过再写一个元数据文件来存储上述额外信息,在读入数据时,通过元文件读取元信息,便能还原数组。该方法虽然复杂,但对于大规模数据存储还是行之有效的。

Numpy 的便捷文件存取方法(np.save(),np.load())

该方法可以很好的解决多维数据的存储问题:
np.save(fname,array)或者np.savez(fname,array)用于将数组信息写入文件。
frame:文件名,以.npy为扩展名,压缩扩展名为.npz
array:数组变量;
np.load(fname)用于读取文件信息。

a = np.arange(100).reshape(5,10,2)
np.save('a.npy',a)
b = np.load('a.npy')
array([[[ 0,  1],[ 2,  3],[ 4,  5],[ 6,  7],...,[94, 95],[96, 97],[98, 99]]])

此时b与a的内容一致,之所以上述numpy的便捷文件存取功能还原数组维度和数组变量类型信息,是因为存储的npy文件是以二进制的形式将数据存储,并且使用显式的方式将数组元信息写入第一行中,通过np.load()函数读取文件时可以通过解析第一行的元信息来还原数组。

小结

对于我们编写程序来说,如果程序中间需要使用文件进行数据缓存,save和load方法是十分有效和快捷的方法,如果希望存储的文件能够以其他的程序做数据交互和对接。那么需要使用csv文件或者多维数组的tofile方法,具体的方法选择也需要我们具体问题,再具体分析!

numpy多维数据存取相关推荐

  1. python读取文件中的数据为二维数组变量_Numpy 多维数据数组的实现

    numpy包(模块)几乎总是用于Python中的数值计算.这个软件包为Python提供了高性能的向量.矩阵.张量数据类型.它是在C和Fortran中创建的,因此当计算被矢量化(用矩阵和矢量表示操作)时 ...

  2. 第一周——数据分析之表示 —— Numpy 数据存取与函数

    数据的CSV文件的存取 CSV文件:CSV (Comma‐Separated Value, 逗号分隔值) CSV是一种常见的文件格式,用来存储批量数据 np.savetxt(frame, array, ...

  3. [二] Numpy数据存取与函数

    Numpy数据存取与函数 一维和二维数据的存取 CSV文件, np.loadtxt(), np.savetxt() 多维数据的存取 a.tofile(), np.fromfile() np.save( ...

  4. Numpy数据存取与函数

    Python数据存取与函数 CSV文件 `np.savetxt()` `np.loadtxt()` CSV文件的局限性 多维数据的存取 `tofile()` `np.fromfile()` 需要注意: ...

  5. python使用np.argsort对一维numpy概率值数据排序获取倒序索引、获取的top索引(例如top2、top5、top10)索引二维numpy数组中对应的原始数据:原始数据概率最大的头部数据

    python使用np.argsort对一维numpy概率值数据排序获取倒序索引.获取的top索引(例如top2.top5.top10)索引二维numpy数组中对应的原始数据:原始数据概率最大的头部数据 ...

  6. python使用np.argsort对一维numpy概率值数据排序获取升序索引、获取的top索引(例如top2、top5、top10)索引二维numpy数组中对应的原始数据:原始数据概率最小的头部数据

    python使用np.argsort对一维numpy概率值数据排序获取升序索引.获取的top索引(例如top2.top5.top10)索引二维numpy数组中对应的原始数据:原始数据概率最小的头部数据 ...

  7. 用Numpy和Pandas分析二维数据笔记

    用Numpy和Pandas分析二维数据 上节课,我们利用numpy和pandas分析了一维数据.在这节课中,你将学到这两种库的更多特性.并用它们来分析 二维数据,这节课后,你将能够使用pandas重新 ...

  8. 关于一维和二维数据的差分和梯度的计算(使用 num.diff() 和 numpy.gradient() )

    关于一维数据的差分和梯度的计算 一维数据的差分公式: 一阶差分: 一阶前向差分:下一个值与当前值的差 f(xk)=f(xk+1)−f(xk)f(x_k) = f(x_{k+1}) - f(x_k)f( ...

  9. Python/numpy之ravel()多维数据展平函数

    Python/numpy之ravel()多维数据展平函数 可参考官方文档numpy.ravel或末尾摘抄内容 ravel()将多维数据展平为一维数据,可以选择不同的数据索引方式(见文档参数四个可选值) ...

  10. Python基于分隔符的文本数据存取

    Python基于分隔符的文本数据存取 CSV模块读写 Numpy库读写 使用pandas库读写 三种方式的区别 基于分隔符的文本数据文件以行尾各条数据的分隔,以各种分隔符(同一个文本数据文件中通常只使 ...

最新文章

  1. 树形dp ——树的重心
  2. python语音在线编辑-Python实时语音识别控制
  3. Paper:GPT-3《 Language Models are Few-Shot Learners》的翻译与解读
  4. hive2solr问题小结
  5. repr方法字符串输出实例对象的值
  6. FeatureLayer.FeatureClass.Feature --以及图层最容易理解的讲解;如有巧合,一定是别人抄袭(Arcgis辅助理解)
  7. 进阶 vue,需要掌握哪些知识?
  8. Ajax与jQuery异步加载数据
  9. backlog配置_Nginx backlog配置概述
  10. arcgis语言如何中文改英文_值得收藏|不重装软件实现ArcGIS中英文版本之间切换...
  11. Android studio 渐变色,android shape 之渐变色角度理解
  12. 哇咔咔!用Android手机控制电脑。
  13. attr()和prop()的区别
  14. Kali-WIFI攻防(二)----无线网络分析工具Aircrack-ng
  15. html 修改表格行背景,HTML表格标记教程(20):行的背景色属性BGCOLOR
  16. opencv实现车牌识别
  17. [转]情侣相处最佳模式
  18. Tue Sep 03 2019 00:00:00 GMT+0800 (中国标准时间)怎么变成时间戳
  19. java 大数据处理之内存溢出解决办法
  20. C++中当用命令行CTRL+Z+Enter模拟EOF后还想继续输入的探索

热门文章

  1. R语言机器学习xgboost实例,油管上的关于xgboost的例子
  2. python之numpy之方差numpy.var
  3. IT程序员常去的论坛、社区、网站有哪些?
  4. 光大银行笔试真题解析,答题技巧
  5. 【CAD二次开发】CAD插件没有权限修改C盘信息的解决方法
  6. SI24R1调试接收方能接收到数据,但发送方提示发送超时失败
  7. 浅谈周大福的积分运营
  8. 网易云轻舟微服务斩获“创新产品奖”等两项大奖
  9. 怎么把kux格式转换成mp4?完美转换优酷kux格式
  10. 【实用性程序】弧微分计算圆周长