【问题标题】:Memory error with numpy. arraynumpy 的内存错误。大批
【发布时间】:2017-06-05 23:01:42
【问题描述】:

在使用带有大数字的 numpy.arange 时出现内存错误。我的代码如下:

import numpy as np

list = np.arange(0, 10**15, 10**3)
profit_list = []

for diff in list:
    x = do_some_calculation
    profit_list.append(x)

什么可以替代,这样我就可以避免出现内存错误?

【问题讨论】:

    标签: numpy memory


    【解决方案1】:

    如果你用生成器替换list¹,也就是说,你这样做

    for diff in range(10**15, 10**3):
        x = do_some_calculation
        profit_list.append(x)
    

    那么这将不再导致MemoryErrors,因为您不再启动完整列表。但是,在这个世界上,profit_list 可能会引起问题,因为您正试图向其中添加 10^12 个项目。同样,您可以通过不显式存储值来解决这个问题,而是使用生成器在需要时生成它们。

    ¹:旁注:不要使用 list 作为变量名,因为它会影响内置变量。

    【讨论】:

    • 我也在尝试绘制(difficulty_list,profit_list)。会以同样的方式完成吗?
    • 我不相信有什么办法可以解决这个问题,因为matplotlib 将作用于numpy 数组;你为什么要首先绘制 10^12 个点?
    • 您应该考虑一下您正在使用的数字的大小,user123。撇开内存问题不谈,对我来说,制作一个包含 10^7 个元素的 ndarray 大约需要 20 毫秒。让我们假设它是线性扩展的(在现实世界中它会更慢)。这意味着构建它需要半个多小时。这是以 C 速度发生的。仅执行pass 就需要我大约 10 ns,这意味着无论您的循环做什么,它都需要比 10^12 * 10 * 10^-9ns ~ 3 小时长的数量级。充其量你应该处理数百万个数字,而不是数万亿个。
    猜你喜欢
    • 1970-01-01
    • 2013-10-05
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多