当前位置:  开发笔记 > 编程语言 > 正文

如何在python中部分加载用numpy保存的数组

如何解决《如何在python中部分加载用numpy保存的数组》经验,为你挑选了1个好方法。

我有一个多维数组与numpy保存,只想部分加载一些维度,因为数组非常大.

我怎么能以简单的方式做到这一点?


编辑:上下文简单而基本:

你有5 Gb数组保存numpy.save.但是,您只需要访问数组的某些部分A[:,:]而无需在内存中加载5gb.


答案是:h5py用于部分保存/加载数据:这里代码示例:

import sys
import h5py

  def main():
data = read()

if sys.argv[1] == 'x':
    x_slice(data)
elif sys.argv[1] == 'z':
    z_slice(data)

def read():
f = h5py.File('/tmp/test.hdf5', 'r')
return f['seismic_volume']

 def z_slice(data):
return data[:,:,0]

  def x_slice(data):
return data[0,:,:]

hpaulj.. 5

你必须故意保存数组以进行部分加载; 你不能一般地做.

例如,您可以拆分数组(沿着其中一个维度)并保存子数组savez. load这样的文件存档是'懒惰的',只读你要求的子文件.

h5py是一个附加包,用于保存和加载HDF5文件中的数据.这允许部分读取.

numpy.memmap 是另一种选择,将文件视为存储数组的内存.

查看这些文档,以及之前的SO问题.

如何有效地读取和写入太大而无法放入内存的文件?

numpy数组最快的保存和加载选项

使用h5py编写大型hdf5数据集


详细说明搁置.有一些小问题尚不清楚."加载某些维度"究竟是什么意思?最简单的解释是你想要A[0,...]A[3:10,...].另一个是"简单方式"的含义.这是否意味着你已经拥有了一种复杂的方式,而这更简单了?或者只是你不想重写numpy.load函数来完成任务?

否则我认为问题相当清楚 - 简单的答案是 - 没有一个简单的方法.

我很想重新开启这个问题,以便其他经验丰富的numpy海报可以权衡.


我应该查看load文档(OP应该也有!).如ali_m评论所述,存在存储器映射模式.文档说:

mmap_mode:{无,'r +','r','w +','c'},可选

   If not None, then memory-map the file, using the given mode
    (see `numpy.memmap` for a detailed description of the modes).
    A memory-mapped array is kept on disk. However, it can be accessed
    and sliced like any ndarray.  Memory mapping is especially useful for
    accessing small fragments of large files without reading the entire
    file into memory.

numpy如何处理mmap的npz文件? (我在几个月前挖了这个,但忘记了选项.)

Python内存映射



1> hpaulj..:

你必须故意保存数组以进行部分加载; 你不能一般地做.

例如,您可以拆分数组(沿着其中一个维度)并保存子数组savez. load这样的文件存档是'懒惰的',只读你要求的子文件.

h5py是一个附加包,用于保存和加载HDF5文件中的数据.这允许部分读取.

numpy.memmap 是另一种选择,将文件视为存储数组的内存.

查看这些文档,以及之前的SO问题.

如何有效地读取和写入太大而无法放入内存的文件?

numpy数组最快的保存和加载选项

使用h5py编写大型hdf5数据集


详细说明搁置.有一些小问题尚不清楚."加载某些维度"究竟是什么意思?最简单的解释是你想要A[0,...]A[3:10,...].另一个是"简单方式"的含义.这是否意味着你已经拥有了一种复杂的方式,而这更简单了?或者只是你不想重写numpy.load函数来完成任务?

否则我认为问题相当清楚 - 简单的答案是 - 没有一个简单的方法.

我很想重新开启这个问题,以便其他经验丰富的numpy海报可以权衡.


我应该查看load文档(OP应该也有!).如ali_m评论所述,存在存储器映射模式.文档说:

mmap_mode:{无,'r +','r','w +','c'},可选

   If not None, then memory-map the file, using the given mode
    (see `numpy.memmap` for a detailed description of the modes).
    A memory-mapped array is kept on disk. However, it can be accessed
    and sliced like any ndarray.  Memory mapping is especially useful for
    accessing small fragments of large files without reading the entire
    file into memory.

numpy如何处理mmap的npz文件? (我在几个月前挖了这个,但忘记了选项.)

Python内存映射


您绝对可以对“通用”保存的数组进行部分读取,例如,将mmap_mode =参数传递给np.load。
推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有