在pandas使用的25个技巧中介绍了几个常用的Pandas的使用技巧,不少技巧在机器学习和深度学习方面很有用处。本文将会介绍Numpy在数据保存和读取方面的内容,这些在机器学习和深度学习方向也大有用处,因为通常我们会采用Numpy和Pandas处理数据,尤其是Pytorch,它和Numpy的结合更为紧密。

  我们先介绍Numpy的几个函数:

numpy.savez(file, *args, **kwds)
file:文件名/文件路径
*args:要存储的数组,可以写多个,如果没有给数组指定Key,Numpy将默认从'arr_0','arr_1'的方式命名 numpy.savez_compressed
使用办法和numpy.savez一样,但是保存的文件会有压缩,可以减小文件大小。 numpy.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ', encoding=None)
保存为txt文件,fname为文件名称,X为numpy中的变量,fmt为保存格式,delimiter为分隔符。

  我们的示例Python代码如下:

# -*- coding: utf-8 -*-
# author: Jclian91
# place: Pudong Shanghai
# time: 2020/3/14 15:14
import numpy as np # 创建1000*1000的矩阵,元素为0-1之间的随机数
matrix = np.random.rand(1000, 1000) # 使用save_z和save_compressed保存maxtrix
np.savez("rand_matrix", matrix=matrix)
np.savez_compressed("rand_matrix_compressed", matrix=matrix) # 保存为txt格式
np.savetxt("rand_matrix.txt", matrix, fmt="%.6f", delimiter=",")

需要注意的是,savetxt函数最多只能保存2维矩阵,3维以上就会报错,rand_matrix.txt中的部分内容如下:



我们看一下保存的文件大小:



可以看到,用savez_compressed保存的文件会比savez保存的文件小,这是因为该函数在文件打包时进行了压缩。

  接着是读取npz文件中的内容,我们以rand_matrix.npz为例,示例代码如下:

# -*- coding: utf-8 -*-
# author: Jclian91
# place: Pudong Shanghai
# time: 2020/3/14 15:39
import numpy as np # 读取npz文件
mat = np.load("rand_matrix.npz")["matrix"] # 输出mat的相关信息
print(mat.shape)
print(mat[:5, :5])

输出内容如下:

(1000, 1000)
[[0.92338524 0.08321306 0.60686435 0.57764367 0.93594528]
[0.10552397 0.98878422 0.5237701 0.03220633 0.85022735]
[0.06755187 0.18767634 0.24769326 0.83413499 0.69020446]
[0.20900975 0.47176702 0.9302718 0.47056681 0.76258641]
[0.46927451 0.72896195 0.50372099 0.58216099 0.58198673]]

  最后,我们将numpy中的矩阵保存为pickle文件,示例代码如下:

# -*- coding: utf-8 -*-
# author: Jclian91
# place: Pudong Shanghai
# time: 2020/3/14 15:45
import numpy as np
import pickle # 创建1000*1000的矩阵,元素为0-1之间的随机数
matrix = np.random.rand(1000, 1000) # 保存为pickle文件
with open("rand_matrix.pk", "wb") as f:
pickle.dump(matrix, f)

生成的文件大小如下:



可以发现生成的pickle文件和numpy中的savez函数保存的文件大小一样。

  本次分享到此结束,感谢大家阅读~

Numpy之数据保存与读取的更多相关文章

  1. C# 结构体和List<T>类型数据转Json数据保存和读取

    C#  结构体和List<T>类型数据转Json数据保存和读取 一.结构体转Json public struct FaceLibrary { public string face_name ...

  2. Java+MySql图片数据保存与读取的具体实例

    1.创建表: drop table if exists photo;CREATE TABLE photo (    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ...

  3. Numpy数组的保存与读取

    1. 数组以二进制格式保存 np.save和np.load是读写磁盘数组数据的两个主要函数.默认情况下,数组以未压缩的原始二进制格式保存在扩展名为npy的文件中,以数组a为例 np.save(&quo ...

  4. Numpy数组的保存与读取方法

    1. 数组以二进制格式保存 np.save和np.load是读写磁盘数组数据的两个主要函数.默认情况下,数组以未压缩的原始二进制格式保存在扩展名为npy的文件中,以数组a为例 np.save(&quo ...

  5. Objective-C数据保存和读取

    一.NSCoding协议中的Archiving和Unarchiving (1)Archiving一个object,会记录这个对象的所有的properties到filesystem: (2)Unarch ...

  6. C/C++语言之由数字26引起的文件的数据保存与读取调试。

    首先在VS2010中遇到的问题是,建立了一个结构体 struct position{ int x; int y; }: 然后用此结构体声明一个数组rout[8]; for(int i=0;i<8 ...

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

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

  8. Python numpy数据的保存和读取

    在科学计算的过程中,往往需要保存一些数据,也经常需要把保存的这些数据加载到程序中,在 Matlab 中我们可以用 save 和 lood 函数很方便的实现.类似的在 Python 中,我们可以用 nu ...

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

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

随机推荐

  1. UFT参数化

    1.Resources-Record and Run Settings 2.打开程序进行录制操作 3.对Fly from和Fly to进行参数化 4.选中点击 5.输入名称,点击OK 6.在Data加 ...

  2. 解决scoped 下confirm 样式问题

  3. 关于虚拟机VMware Tools安装中出现的无法自动安装VMCI驱动程序的问题

    问题 解决方法 根据配置文件信息找到所在的虚拟机位置 找到后缀名为vmx的文件,右键打开方式中选择使用记事本打开 选择左上角编辑中的查找功能输入图中的查找内容后,点击查找下一个 将其原先的TRUE值改 ...

  4. HDU-1403-Longest Common Substring(后缀数组的高度数组运用)

    这题要求两个串中的最长相同子串的长度.高度数组可以求一个串中的最长相同子串的长度.所以想到把两个串连起来,但是这样又会产生一些新的串(第一个串的结尾和第二个串的开头组成的)于是在两个串中间放一个'\0 ...

  5. 洛谷-P3809-后缀排序(后缀数组)

    看了求后缀数组的倍增法之后很快就理解了,但是自己写的倍增法用map排序还是超时了.然后看了两天别人写的模板,题目是通过了,但感觉代码还是半懂半背的.以后多熟悉熟悉吧: 后缀数组 #include &q ...

  6. IO流框架

    目录 IO流框架总结 字节流 字符流 IO流框架总结 普通IO / NIO 字节流 字节流是万能流,但是在处理字符方面有时候不太方便,一般用来处理二进制文件 字节输入流 InputStream int ...

  7. STM32 CAN 发送和接收 寄存器变化过程

    发送:

  8. Java Annotation/Scope

    1.在计算机编程语言Java中,什么是注释(Annotation)? 注释是一种可以添加到Java源代码的语法元数据或描述(注释不影响程序执行) 2.注释(Annotation)有什么作用?    ( ...

  9. moment获取2周后日期

    moment().add('days',14).format('YYYY年MM月DD日');

  10. Contour等高线图代码

    import matplotlib.pyplot as plt import numpy as np def f(x,y): # the height function return (1 - x / ...