如何使用大型numpy数组优化Python中的内存分配?

2024-05-16 00:26:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用numpy(1.15.4)和h5py(2.9.0)的方式如下:

import numpy as np
import h5py
import sys

Ns, N, L, Nz = (40, 80, 3240, 160)
largeArray = np.zeros((Ns,N, L, Nz), dtype=complex)

for ids in range(Ns):
    for n in range(N):
        for l in range(L):
            #calling a bunch of numerical operations with pybind11 
            #and storing the results into a largeArray
            largeArray[ids, n, l]=ids+n+l*1j

f = h5py.File('myFile.hdf5', 'w')
f.create_dataset('largeArray', data=largeArray)
print('content:', largeArray.nbytes)
print('size:', sys.getsizeof(largeArray))

一大块数据需要分配26.5GB,系统报告的内存使用量为148gb。我假设内存管理器正在用硬盘交换内存中的数据,对吗?。我用pybind11来包装数值运算,我开始在最外层的循环(ids)中将数据分解成块,用mpih5py存储在parallel中的数据,但在某个时候我的存储空间用完了。你知道什么会吞噬所有的记忆吗?你知道吗


Tags: 数据内存inimportnumpyidsfornp