Numpy hstack 导致内存溢出

3 投票
2 回答
2531 浏览
提问于 2025-04-18 07:21

我刚开始学Python,不太明白为什么在用Numpy的 hstack 把两个 pandas 数据框合并时,内存使用量会突然飙升。用 pandas.concat 的效果更糟糕——有时候根本无法完成,所以我选择了用NumPy。

这两个数据框相对比较大,但我有20GB的空闲内存(现在用掉了11GB,包括我想复制的这两个数据框)。

数据框a和b的形状是:

a.shape (66377, 30)
b.shape (66377, 11100)

当我使用 np.hstack((a,b)) 时,我的20GB空闲内存完全被用光了。

2 个回答

2

np.hstack 会返回一个新数组,这个新数组里包含了原始数据的副本,所以当你使用这个函数时,你的内存使用量就翻倍了。

你可以通过 a.nbytesb.nbytes 等来查看每个数组的内存使用情况。

1

在这个讨论中,提到不能直接在原地添加数组,这样做也不高效,因为没有办法保证扩展后的数组在内存中是连续的。

在Python中,如果你在合并数组后删除对象ab,垃圾回收器应该会释放你的内存:

a = append(a, b, axis=1)
del b

如果它没有释放内存,你可以强制它释放:

import gc
gc.collect()

撰写回答