使用xrange减少内存使用,For循环

时间:2017-07-06 21:45:11

标签: python python-2.7 pandas numpy xrange

我有一行代码会产生非常大的内存消耗。

以下是该行:

X_train = (np.array(a).reshape(1000,100) for a in X_train)

简单地说,我正在重塑我数据集的每一行。问题是,这会产生内存错误,导致本地和AWS上的内核崩溃。

如何使用xrange函数重写该行,以减少内存使用量?

(或任何其他可以减少内存使用的方式)

感谢!!!

1 个答案:

答案 0 :(得分:1)

如@ali_m所述,该行本身就是一个生成器表达式。这意味着在评估该生成器表达式的元素之前,不会评估X_train的任何元素。您必须评估X_train的所有元素并将其存储在代码中的某个位置的内存中,可能是通过执行list(X_train),将X_train的每个元素附加到列表或类似的东西。这将创建一个列表,其长度与生成器表达式之前的原始X_train相等,因此如果它太大则会导致内存错误。

在生成器表达式仍在评估时,原始X_train无法进行垃圾回收,因此通过创建新X_train的列表,您将创建两个巨大的列表,这可能就是它运行的原因记忆力不足。

在这种情况下,您无法使用xrange来提高代码效率,因为它已经是生成器表达式。最好的办法是查看稍后在代码中如何使用X_train并尝试迭代它(for _ in X_train),而不是将其变为列表(list(X_train))尽可能。