Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中部分加载使用numpy save保存的数组_Python_Numpy_Scipy - Fatal编程技术网

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

如何在python中部分加载使用numpy save保存的数组,python,numpy,scipy,Python,Numpy,Scipy,我有一个带有numpy save的多维数组,只想部分加载一些维度,因为数组非常大 我怎样才能用简单的方法来做呢 编辑:上下文简单且基本: 您使用numpy.save保存了5 Gb阵列。但是,您只需要访问阵列的某些部分A[:,:],而无需在内存中加载5gb 答案是:使用h5py部分保存/加载数据:此处代码示例: import sys import h5py def main(): data = read() if sys.argv[1] == 'x': x_slice(data

我有一个带有numpy save的多维数组,只想部分加载一些维度,因为数组非常大

我怎样才能用简单的方法来做呢


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

您使用
numpy.save
保存了5 Gb阵列。但是,您只需要访问阵列的某些部分
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,:,:]

您必须有意地保存数组以进行部分加载;你不能一般地这样做

例如,您可以拆分阵列(沿其中一个维度)并使用
savez
保存子阵列<代码>加载这样的文件存档是“懒惰的”,只读取您要求的子文件

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

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

查阅这些文档以及之前的SO问题


详细说明货舱。有一些小问题还不清楚。你所说的“加载一些维度”到底是什么意思?最简单的解释是您想要
A[0,…]
A[3:10,…]
。二是“简单方式”的含义。这是否意味着你已经有了一个复杂的方法,一个多么简单的方法?或者只是不想重写
numpy.load
函数来完成任务

否则,我认为问题是相当清楚的——简单的答案是——没有简单的方法

我很想重新讨论这个问题,这样其他有经验的
numpy
海报就可以参与进来了


我应该已经检查了
加载
文档(OP也应该有!)。如
ali_m
所述,存在内存映射模式。文件说:

mmap_模式:{None,'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.
(几个月前,我深入研究了这个问题,但忘记了选项。)


编辑您的问题并添加您已经尝试过的代码示例将帮助您获得答案。我建议你这么做。@Jim,这还不够简单,不能说是pythonic。这个问题不清楚是因为它缺少代码示例,还是因为你对
numpy
save
load
方法一无所知?这个问题中唯一我不清楚的部分是“加载某个维度”这个短语,它可能意味着几件事。正确回答这个问题:使用hd5f。保存数据和部分链接是可能的。@quantCode我从未投票认为它不清楚。我只是建议你添加你已经尝试过的内容。我将投票重新打开此问题,如果出现这种情况,请将您在问题中编辑的答案作为答案发布。您肯定可以部分读取“通用”保存的数组,例如通过将
mmap\u mode=
参数传递到
np.load
您好,谢谢,我将查看memmap或mmap,在memeory中不加载5go就可以访问数据,这看起来很有希望……我发现这个问题和答案很有用。似乎(至少)提到了两种不同的解决方案——手动“分块保存”,以及下载和安装软件包。我想重新开放就可以了。