我有一行代码会产生非常大的内存消耗。
以下是该行:
X_train = (np.array(a).reshape(1000,100) for a in X_train)
简单地说,我正在重塑我数据集的每一行。问题是,这会产生内存错误,导致本地和AWS上的内核崩溃。
如何使用xrange函数重写该行,以减少内存使用量?
(或任何其他可以减少内存使用的方式)
感谢!!!
答案 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)
)尽可能。