首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >耗时: np.sum与sum

耗时: np.sum与sum
EN

Stack Overflow用户
提问于 2021-02-08 23:48:25
回答 3查看 109关注 0票数 0

实际上,与列表和元组等其他组件相比,Numpy所需的完成时间更短。但从下面的代码中,如果我们取出np并检查所用的时间,大约是1.8秒,但对于np,求和需要超过21秒。你能告诉我为什么吗?

代码语言:javascript
复制
import numpy as np
import time
start = time.process_time() 
p = np.sum(range(1,100000000))   
print(time.process_time() - start)
EN

回答 3

Stack Overflow用户

发布于 2021-02-08 23:54:12

我的rep很低,所以我不能评论,但这可能是因为需要时间将范围转换为numpy对象

我会以这样的东西为基准:

代码语言:javascript
复制
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)

一些更有经验的用户可能会向您推荐一个基准测试实用程序,它可以更好地描述时间消耗的位置

票数 1
EN

Stack Overflow用户

发布于 2021-02-09 00:01:53

尽我最大的努力在这里比较苹果,让我们完全创建一个列表和一个整数数组,范围从1到1,000,000:

代码语言:javascript
复制
import numpy as np

lst = list(range(1, int(1e6)))
vec = np.arange(1, 1e6, dtype=int)

现在,让我们在jupyter中使用一个专门构建的计时实用程序来比较这些操作:

代码语言:javascript
复制
%%timeit
sum(lst)

这给了我:

9.14 ms±379µs /环路(平均值±标准dev.共7次运行,每次100次循环)

代码语言:javascript
复制
%%timeit
vec.sum()

这给了我:

957µs±39.1µs /环路(平均值±标准dev.共7次运行,每次1000次循环)

因此,在我看来,如果确保具有相同的数据类型,并且省略了从计时中创建的对象,那么numpy的性能就不负众望。

票数 0
EN

Stack Overflow用户

发布于 2021-02-09 00:04:37

似乎大部分时间都花在了将python范围转换为np.array上。你可以查看它:

代码语言:javascript
复制
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))的执行顺序如下:

  1. 正在由range function创建生成器
  2. 正在从生成器创建np.array (这是花费时间最多的地方)
  3. np.sum is by np.array

我建议你使用np.arange而不是range:

代码语言:javascript
复制
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))快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66104851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档