python – 是否可以np.concatenate内存映射文件?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 是否可以np.concatenate内存映射文件?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1599字,纯文字阅读大概需要3分钟。
内容图文
我用np.save()保存了几个numpy数组,并且放在一起它们非常庞大.
是否有可能将它们全部作为内存映射文件加载,然后连接并切换所有这些文件而不将任何内容加载到内存中?
解决方法:
使用numpy.concatenate显然将数组加载到内存中.为避免这种情况,您可以在新文件中轻松创建第三个memmap数组,并从要连接的数组中读取值.以更有效的方式,您还可以将新数组附加到磁盘上现有的文件中.
对于任何情况,您必须为数组选择正确的顺序(行主要或列主要).
以下示例说明了如何沿轴0和轴1连接.
1)沿轴= 0连接
a = np.memmap('a.array', dtype='float64', mode='w+', shape=( 5000,1000)) # 38.1MB
a[:,:] = 111
b = np.memmap('b.array', dtype='float64', mode='w+', shape=(15000,1000)) # 114 MB
b[:,:] = 222
您可以定义第三个数组,读取与要连接的第一个数组相同的文件(此处为a),在模式r(读取和追加)中,但是在连接后要实现最终数组的形状,如:
c = np.memmap('a.array', dtype='float64', mode='r+', shape=(20000,1000), order='C')
c[5000:,:] = b
沿轴= 0连接不需要传递order =’C’,因为这已经是默认顺序.
2)沿轴= 1连接
a = np.memmap('a.array', dtype='float64', mode='w+', shape=(5000,3000)) # 114 MB
a[:,:] = 111
b = np.memmap('b.array', dtype='float64', mode='w+', shape=(5000,1000)) # 38.1MB
b[:,:] = 222
保存在磁盘上的数组实际上是扁平化的,因此如果使用mode = r和shape =(5000,4000)创建c而不更改数组顺序,则a中第二行的1000个第一个元素将转到第一行C.但你可以很容易地避免这个传递order =’F'(列主要)到memmap:
c = np.memmap('a.array', dtype='float64', mode='r+',shape=(5000,4000), order='F')
c[:, 3000:] = b
这里有一个带有连接结果的更新文件’a.array’.您可以重复此过程以成对的方式连接两个.
相关问题:
> Working with big data in python and numpy, not enough ram, how to save partial results on disc?
内容总结
以上是互联网集市为您收集整理的python – 是否可以np.concatenate内存映射文件?全部内容,希望文章能够帮你解决python – 是否可以np.concatenate内存映射文件?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。