2017-06-05 22 views
0

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

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) 

什么可以是一个替换,所以我可以避免出现内存错误?

回答

1

如果您要更换list¹,发电机,那就是,你做

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

那么这将不再导致MemoryError S作为您不再发起的完整列表。然而,在这个世界上,profit_list可能会导致问题,因为您正试图将10^12个项目添加到该项目中。同样,你可以通过不明确地存储值来解决这个问题,而是在你需要时使用生成器来生成它们。

¹:附注:不要使用list作为变量名称,因为它会遮挡内置。

+0

我也试图绘制(难度一览表,profit_list)。这是否会以同样的方式完成? – user123

+0

我不相信有什么出路,因为'matplotlib'将会作用于'numpy'阵列;为什么你会想要首先绘制10^12点? – fuglede

+0

你应该考虑你正在使用的数字的大小,user123。撇开内存问题,对我来说,制作10^7元素的ndarray大概需要20毫秒。让我们假设线性缩放(在现实世界中它会减慢甚至更多)。这意味着它需要花费超过半小时的时间来构建它。这就是C速度。我只需要约10纳秒就可以执行'pass',这意味着无论你的循环如何做,它都会比10^12 * 10 * 10^-9ns〜3小时长。充其量,你应该使用数百万的数字,而不是数万亿。 – DSM