Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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 如何在hdf5文件中存储太大而无法加载到内存中的阵列?_Python_Memory_Numpy_Hdf5 - Fatal编程技术网

Python 如何在hdf5文件中存储太大而无法加载到内存中的阵列?

Python 如何在hdf5文件中存储太大而无法加载到内存中的阵列?,python,memory,numpy,hdf5,Python,Memory,Numpy,Hdf5,有没有办法将数组存储在hdf5文件中,因为该文件太大,无法加载到内存中 如果我做这样的事 f = h5py.File('test.hdf5','w') f['mydata'] = np.zeros(2**32) 我得到一个内存错误。根据,您可以使用create\u dataset创建存储在hdf5中的分块数组。例如: >>> import h5py >>> f = h5py.File('test.h5', 'w') >>> arr = f.

有没有办法将数组存储在hdf5文件中,因为该文件太大,无法加载到内存中

如果我做这样的事

f = h5py.File('test.hdf5','w')
f['mydata'] = np.zeros(2**32)
我得到一个内存错误。

根据,您可以使用
create\u dataset
创建存储在hdf5中的分块数组。例如:

>>> import h5py
>>> f = h5py.File('test.h5', 'w')
>>> arr = f.create_dataset('mydata', (2**32,), chunks=True)
>>> arr
<HDF5 dataset "mydata": shape (4294967296,), type "<f4">
可以将值设置为Numpy数组的值

>>> arr[3:5] = 3
>>> arr[:6]
array([ 0.,  0.,  0.,  3.,  3.,  0.], dtype=float32)
我不知道这是否是最有效的方法,但可以分块迭代整个数组。例如,将其设置为随机值:

>>> import numpy as np
>>> for i in range(0, arr.size, arr.chunks[0]):
        arr[i: i+arr.chunks[0]] = np.random.randn(arr.chunks[0])
>>> arr[:5]
array([ 0.62833798,  0.03631227,  2.00691652, -0.16631022,  0.07727782], dtype=float32)

看一看。这是可能的,但您应该使用“chunks”编写,并使hdf5文件可分块。如果事先不知道数据集大小,该怎么办?可以在附加模式下完成吗?@mrglud也许这适合你的需要?
>>> import numpy as np
>>> for i in range(0, arr.size, arr.chunks[0]):
        arr[i: i+arr.chunks[0]] = np.random.randn(arr.chunks[0])
>>> arr[:5]
array([ 0.62833798,  0.03631227,  2.00691652, -0.16631022,  0.07727782], dtype=float32)