python3存储numpy格式的矩阵
2021-05-02 19:21
357 查看
技术背景
numpy在python中的地位是相当高的,即使是入门的python使用者也会经常看到这个库的使用。除了替代python自带的列表数据格式list之外,numpy的一大优势是其底层的高性能实现方式,比如前一篇博客中所提到的矢量运算,就是一种基于SIMD的底层运算优化方案,使得numpy的计算速度远高于一个普通的for循环。
而在日常运算的过程中,有些数据往往是不会变化的,比如机器学习中的测试和训练数据。那么如果这里使用的是numpy的数据结构的话,就会涉及到相关数据的存储,numpy可以将其数据存储为
.npy或者
.npz结构。
npy结构的数据存储
npy格式适用于单个numpy列表的存储,这个列表的维度可以是任意的,但是最外层必须是一个numpy的列表结构。以下用ipython来展示npy文件的基本使用方法,首先是创建一个数组,然后用
np.save保存到一个给定的文件名中:
[dechin@dechin-manjaro numpy]$ ipython Python 3.8.5 (default, Sep 4 2020, 07:30:14) Type 'copyright', 'credits' or 'license' for more information IPython 7.19.0 -- An enhanced Interactive Python. Type '?' for help. In [1]: import numpy as np In [2]: test_arr = np.arange(10) In [3]: np.save('test_arr', test_arr) In [5]: !ls -l 总用量 4 -rw-r--r-- 1 dechin dechin 208 5月 2 18:52 test_arr.npy
可以看到文件名会自动补充
npy的后缀,然后可以在当前目录下使用
np.load函数直接加载刚才保存的数据:
In [6]: print (np.load('test_arr.npy')) [0 1 2 3 4 5 6 7 8 9]
类似的可以测试一下多个维度的随机数组:
In [7]: test_arr = np.random.randn(2,5) In [8]: np.save('random_arr', test_arr) In [9]: !ls -l 总用量 8 -rw-r--r-- 1 dechin dechin 208 5月 2 18:56 random_arr.npy -rw-r--r-- 1 dechin dechin 208 5月 2 18:52 test_arr.npy In [10]: print (np.load('random_arr.npy')) [[ 2.6917403 0.01488535 -0.5259401 -1.41512577 0.65968369] [-0.68929493 0.30153131 0.84906878 -2.20849715 0.34260589]]
除了可以保存numpy格式的数组,还可以直接保存python本身的数组格式的数据:
In [11]: normal_arr = [1,3,5,7,9] In [12]: np.save('normal_arr', normal_arr) In [13]: print (np.load('normal_arr.npy')) [1 3 5 7 9]< ad8 /pre>
甚至还可以保存一些非列表格式的数据,比如python中的
tuple,但是保存后重新加载的数据格式,会被自动转化成列表格式:
In [14]: tuple_arr = [(1,2),(2,3),(3,4)] In [15]: np.save('tuple_arr', tuple_arr) In [16]: print (np.load('tuple_arr.npy')) [[1 2] [2 3] [3 4]]npz结构的数据存储
上面介绍的
npy数据结构存储下来是一个二进制的文件,仅用于单个列表数据结构的存储,这里的npz数据结构可以存储多个列表结构的对象,可以直接参考一个使用案例:In [17]: multi_arr1 = 3 In [18]: multi_arr2 = [1,2,3] In [19]: multi_arr3 = (4,5) In [20]: multi_arr4 = [[6,7],[8,9]] In [22]: np.savez('multi_arr',multi_arr1,multi_arr2,multi_arr3,named_arr=multi_arr4) In [23]: !ls -l 总用量 20 -rw-r--r-- 1 dechin dechin 1078 5月 2 19:09 multi_arr.npz -rw-r--r-- 1 dechin dechin 168 5月 2 19:00 normal_arr.npy -rw-r--r-- 1 dechin dechin 208 5月 2 18:56 random_arr.npy -rw-r--r-- 1 dechin dechin 208 5月 2 18:52 test_arr.npy -rw-r--r-- 1 dechin dechin 176 5月 2 19:02 tuple_arr.npy In [24]: data=np.load('multi_arr.npz') In [25]: data['arr_0'] Out[25]: array(3) In [26]: data['arr_1'] Out[26]: array([1, 2, 3]) In [27]: data['arr_2'] Out[27]: array([4, 5]) In [28]: data['named_arr'] Out[28]: array([[6, 7], [8, 9]])在
npz的数据结构中,除了列表以外的格式都会被自动转化成numpy的列表。而多个的列表对象最终是以字典的形式存储在文件中,如果不加以定义,那么索引的名称默认为arr_加上一个数字的格式,以0为起点。如果需要手动的命名,需要在传入savez函数的末尾处加上手动命名的对象,比如上面实例中的named_arr。npz文件的读取方式跟npy是一样的,使用np.load函数即可。存储数据的压缩
最后我们再额外介绍一个
tar压缩包的使用方法,如果存储的npz文件较大,可以通过tar -zcvf filename.tar.gz filename.npz打包成一个压缩包,特别是当数据中0的数量较多时,可以获得一个非常理想的压缩比。[dechin@dechin-manjaro numpy]$ ll 总用量 20 -rw-r--r-- 1 dechin dechin 1078 5月 2 19:09 multi_arr.npz -rw-r--r-- 1 dechin dechin 168 5月 2 19:00 normal_arr.npy -rw-r--r-- 1 dechin dechin 208 5月 2 18:56 random_arr.n ad8 py -rw-r--r-- 1 dechin dechin 208 5月 2 18:52 test_arr.npy -rw-r--r-- 1 dechin dechin 176 5月 2 19:02 tuple_arr.npy [dechin@dechin-manjaro numpy]$ tar -zcvf multi_arr.tar.gz multi_arr.npz multi_arr.npz [dechin@dechin-manjaro numpy]$ ll 总用量 24 -rw-r--r-- 1 dechin dechin 1078 5月 2 19:09 multi_arr.npz -rw-r--r-- 1 dechin dechin 427 5月 2 19:14 multi_arr.tar.gz -rw-r--r-- 1 dechin dechin 168 5月 2 19:00 normal_arr.npy -rw-r--r-- 1 dechin dechin 208 5月 2 18:56 random_arr.npy -rw-r--r-- 1 dechin dechin 208 5月 2 18:52 test_arr.npy -rw-r--r-- 1 dechin dechin 176 5月 2 19:02 tuple_arr.npy而关于
tar.gz格式的文件的解压缩,则是使用tar -xvf filename.tar.gz命令。总结概要
在科学计算中对于恒定不变的数据,不一定需要实时保存在内存中,或者是需要跨平台运算的数据,我们可以将其保存为numpy格式的列表文件npy或者npz。而如果存储的文件过大,本文也额外介绍了简单的tar压缩与解压缩的使用方法。
版权声明
本文首发链接为:https://www.cnblogs.com/dechinphy/p/npz.html
作者ID:DechinPhy
更多原著文章请参考:https://www.cnblogs.com/dechinphy/
相关文章推荐
- python中numpy的矩阵、多维数组的用法
- 读书笔记(十)——python简单爬取企查查网企业信息,并以excel格式存储
- Python学习-numpy高级之矩阵点积vdot函数
- 稀疏矩阵的存储格式(转)
- 利用python进入数据分析之数据加载、存储、文件格式
- Python数据分析--科学计算工具Numpy文件读写与存储
- python numpy矩阵信息,shape,size,dtype
- python numpy 矩阵转置
- python numpy初始化一个图像矩阵
- python numpy矩阵信息,shape,size,dtype
- 关于Python图片着色后存储为“JPEG”格式存在明显色差的测试
- 稀疏矩阵的存储格式
- Python.Numpy学习零碎笔记之数组与矩阵
- Feather R语言和Python交互式硬盘存储格式
- 关于用mapreduce做kmeans聚类以及python的numpy和list做矩阵、向量乘法的速度对比
- 稀疏矩阵存储格式总结
- Python numpy 提取矩阵的某一行或某一列
- python的Numpy之矩阵操作
- python numpy 矩阵用法
- <Python> Numpy中的矩阵乘法问题