为什么buff/cache在使用for循环加载大量numpy数组时变得越来越大?

2024-09-27 07:34:21 发布

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

我正在处理一个项目,需要使用for循环加载磁盘上保存的大量numpy数组。我使用的系统是Linux。你知道吗

下图显示了进程中的内存使用情况

the memory useage

如您所见,buff/cache下的不可用内存部分甚至可能比已用内存大。这部分内存保存了什么?我怎样才能减少它?你知道吗

用于加载数组的脚本如下所示:

import numpy as np

tmp = []
slice1, slice2 = [], []
for item in hashes:
    # np.load(item) has a shape (50, 96)
    tmp.append(np.load(item))
tmp = np.concatenate(tmp, axis=0)

mask1 = # a mask used for slicing, a third of the entries will be selected 
mask2 = # a different mask for slicing, a third of the entries will be selected 

slice1 = tmp[mask1]
slice2 = tmp[mask2]

Tags: of内存numpyfornploadmask数组
1条回答
网友
1楼 · 发布于 2024-09-27 07:34:21

根据显示的短代码段,您可能正在将Numpy ndarray对象转换为列表对象,同时对它们进行操作。尝试使用所有Numpy对象和方法。也要尽量避免for循环,而是使用Numpy矢量化操作。56GB是一个巨大的内存量。哎呀!:-)

可能的Numpy代码:

import numpy as np 

tmp = np.array([0, 1, 2, 3, 4], ndim=2)
tmp = np.zeros((50, 96))
load_object = np.load(filename)   
tmp = np.array(load_object)

# slice1 = [mask range 1]
# slice2 = [mask range 2]
# Numpy vertical stack
result = np.vstack((tmp[slice1], tmp[slice2]))

Numpy垂直堆叠方法文档:
https://docs.scipy.org/doc/numpy/reference/generated/numpy.vstack.html

a = np.array([1, 2, 3])
b = np.array([2, 3, 4])
np.vstack((a,b))
(output)
array([[1, 2, 3],
       [2, 3, 4]])

希望这能解决你的问题。稍后我会做更多的测试,并编辑我的答案。你知道吗

相关问题 更多 >

    热门问题