Numpy hstack爆炸记忆

时间:2014-05-23 00:16:05

标签: python numpy pandas

我是Python的新手,当我使用Numpy hstack将两个pandas数据帧连接在一起时,我不确定为什么我会看到内存使用量激增。 pandas.concat的表现更糟 - 如果它完全结束 - 所以我使用的是NumPy。

两个数据帧相对较大,但我有20 GB的空闲RAM(使用11GB,包括我要复制的两个数据帧)。

数据框a和b具有形状:

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

当我使用np.hstack((a,b))时,免费的20GB已经用完了。

2 个答案:

答案 0 :(得分:2)

np.hstack返回一个包含基础数据副本的新数组,因此在执行此操作时,您的内存使用量会翻倍。

您可以使用a.nbytesb.nbytes等检查每个阵列的内存使用情况。

答案 1 :(得分:1)

如图in this thread所示,不可能在适当的位置附加一个数组,因为无法保证扩展数组在内存中保持连续性,所以效率不高。

如果在连接数组后删除对象ab,Python的垃圾收集器应该释放你的内存:

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

如果它没有释放你可以强迫它:

import gc
gc.collect()