Python 所用时间:np.sum vs.sum
事实上,与其他列表和元组相比,Numpy的完成时间更短。但是从下面的代码中,如果我们取出np并检查所花费的时间,它大约是1.8秒,但是对于np,总和超过21秒。你能告诉我为什么吗Python 所用时间:np.sum vs.sum,python,numpy,sum,Python,Numpy,Sum,事实上,与其他列表和元组相比,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) 我的rep值较低,因此无法发表评论,但这可能是因为需要将范围
import numpy as np
import time
start = time.process_time()
p = np.sum(range(1,100000000))
print(time.process_time() - start)
我的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)
一些经验更丰富的用户可能会向您介绍一个基准实用程序,它可以更好地描述时间消耗的位置尽我所能比较不同的苹果在这里,让我们完全创建一个列表和一个整数数组,范围从1到1000000:
将numpy导入为np
lst=列表(范围(1,整数(1e6)))
vec=np.arange(1,1e6,dtype=int)
现在,让我们使用jupyter中专门构建的计时实用程序来比较操作:
%%timeit
总和(lst)
这给了我:
每个回路9.14 ms±379µs(7次运行的平均值±标准偏差,每个100个回路)
%%timeit
向量和()
这给了我:
每个回路957µs±39.1µs(7次运行的平均值±标准偏差,每个1000个回路)
因此,在我看来,如果确保您拥有相同的数据类型,并且不考虑从计时中创建对象,numpy的性能符合其要求。似乎大部分时间都花在了将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(范围(1100000000))
按以下顺序执行:
范围
功能创建生成器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(范围(1100000000))
这是否回答了您的问题?