Numpy hstack 导致内存溢出
我刚开始学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.nbytes
、b.nbytes
等来查看每个数组的内存使用情况。
1
在这个讨论中,提到不能直接在原地添加数组,这样做也不高效,因为没有办法保证扩展后的数组在内存中是连续的。
在Python中,如果你在合并数组后删除对象a
和b
,垃圾回收器应该会释放你的内存:
a = append(a, b, axis=1)
del b
如果它没有释放内存,你可以强制它释放:
import gc
gc.collect()