Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 所用时间:np.sum vs.sum_Python_Numpy_Sum - Fatal编程技术网

Python 所用时间:np.sum vs.sum

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值较低,因此无法发表评论,但这可能是因为需要将范围

事实上,与其他列表和元组相比,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值较低,因此无法发表评论,但这可能是因为需要将范围转换为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.array(这是花费时间最多的地方)
  • np.sum正在计算中
  • 我建议您使用
    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))

    这是否回答了您的问题?