Numpy能够读写磁盘上的文本数据或者二进制数据。这里只讨论numpy的内置二进制格式,因为更多的用户会使用pandas或其他工具来加载文本或者表格数据。
np.save与np.load函数是读取磁盘数组数据的两个主要函数。默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中的:
In [213]: arr = np.arange(10)
In [214]: np.save('some_array', arr)
可以看到,文件路径末尾没有扩展名.npy也没有关系,最后保存的时候扩展名会被自动加上。保存就是为了以后读取的(不是用来删着玩的),然后就可以用np.load读取磁盘上的数组了:
In [215]: np.load('some_array.npy')
Out[215]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
通过np.savez可以将多个数组保存到一个未压缩文件中(这里的后缀为.npz),将数组以关键字参数的形式传入即可:
In [216]: np.savez('array_archive.npz', a=arr, b=arr)
加载.npz文件时,你会得到一个类似字典的对象,该对象会对各个数组进行延迟加载:
In [217]: arch = np.load('array_archive.npz')
In [218]: arch['b']
Out[218]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
延迟加载是什么意思?
延迟加载(lazyload)又称懒加载,类似随用随取的意思,当需要使用的时候再加载出来。现在许多网页、app也采用懒加载的形式,只有当scroll滚动条滑动到指定位置,才对某些占资源的文件如图片进行加载。
如果要将数据压缩,可以使用numpy.savez_compressed:
In [219]: np.savez_compressed('arrays_compressed.npz', a=arr, b=arr)
更新完毕,哈哈~哈
文章代码引用自:《利用Python进行数据分析·第2版》第4章 NumPy基础:数组和矢量计算
作者:SeanCheney
感谢SeanCheney同意引用。