实际上,与列表和元组等其他组件相比,Numpy所需的完成时间更短。但从下面的代码中,如果我们取出np并检查所用的时间,大约是1.8秒,但对于np,求和需要超过21秒。你能告诉我为什么吗?
import numpy as np
import time
start = time.process_time()
p = np.sum(range(1,100000000))
print(time.process_time() - start)发布于 2021-02-08 23:54:12
我的rep很低,所以我不能评论,但这可能是因为需要时间将范围转换为numpy对象
我会以这样的东西为基准:
import numpy as np
import time
vec = np.array(range(1, 1e8))
start = time.process_time()
p = np.sum(vec)
print(time.process_time() - start)一些更有经验的用户可能会向您推荐一个基准测试实用程序,它可以更好地描述时间消耗的位置
发布于 2021-02-09 00:01:53
尽我最大的努力在这里比较苹果,让我们完全创建一个列表和一个整数数组,范围从1到1,000,000:
import numpy as np
lst = list(range(1, int(1e6)))
vec = np.arange(1, 1e6, dtype=int)现在,让我们在jupyter中使用一个专门构建的计时实用程序来比较这些操作:
%%timeit
sum(lst)这给了我:
9.14 ms±379µs /环路(平均值±标准dev.共7次运行,每次100次循环)
%%timeit
vec.sum()这给了我:
957µs±39.1µs /环路(平均值±标准dev.共7次运行,每次1000次循环)
因此,在我看来,如果确保具有相同的数据类型,并且省略了从计时中创建的对象,那么numpy的性能就不负众望。
发布于 2021-02-09 00:04:37
似乎大部分时间都花在了将python范围转换为np.array上。你可以查看它:
import numpy as np
import time
start = time.process_time()
p = np.array(range(1,100000000))
print(time.process_time() - start)在我的CPU上大约是16秒。
np.sum(range(1,100000000))的执行顺序如下:
range function创建生成器我建议你使用np.arange而不是range:
import numpy as np
import time
start = time.process_time()
p = np.sum(np.arange(1,100000000))
print(time.process_time() - start)在这种情况下,计算总和的速度比sum(range(1,100000000))快。
https://stackoverflow.com/questions/66104851
复制相似问题