gpt4 book ai didi

python - 了解 numpy 数组的运行时?

转载 作者:太空宇宙 更新时间:2023-11-03 16:22:40 24 4
gpt4 key购买 nike

我想知道是否有人可以帮助我理解为什么以下两个程序以显着不同的速度运行(第一个程序大约需要 1/10 秒,第二个程序大约需要 3 秒)。

def gaussian(x, h, m, c):
return list(h * exp(-(x-m)**2/(2*c**2)))

x = np.linspace(0, 1000, 1001)

for i in range(1000):
gaussian(x, 50, 500, 10)

def gaussian2(x, h, m, c):
def computer(x):
return h * exp(-(x-m)**2/(2*c**2))
y = []
for val in x:
y.append(computer(val))
return y

x = np.linspace(0, 1000, 1001)

for i in range(1000):
gaussian2(x, 50, 500, 10)

我需要第二个版本的唯一原因是它让我可以查看列表中的所有元素,以便我可以使用它们执行其他操作(本示例中未说明)。但这不是我要问的——我要问为什么第二种形式比第一种形式慢得多。

谢谢!

最佳答案

MaxU 是对的,主要原因是 numpy 中的向量化数学比 Python 中的标量数学更快。然而,同样重要的是要记住,与循环 Python 列表相比,循环 numpy 数组会降低性能。在这种情况下,它并没有像数学那样显示出来,但在其他情况下,它可能是主要的减速因素

import numpy as np
import math

def gaussian(x, h, m, c):
return list(h * np.exp(-(x-m)**2/(2*c**2)))

def gaussian2(x, h, m, c):
def computer(x):
return h * math.exp(-(x-m)**2/(2*c**2))
y = []
for val in x:
y.append(computer(val))
return y

x = np.linspace(0, 1000, 1001)
x_list = x.tolist()

%timeit gaussian(x, 50, 500, 10)
%timeit gaussian2(x, 50, 500, 10)
%timeit gaussian2(x_list, 50, 500, 10)

产量:

10000 loops, best of 3: 114 µs per loop
100 loops, best of 3: 2.97 ms per loop
100 loops, best of 3: 2.35 ms per loop

很明显,最大的瓶颈是数学,但是与列表相比,循环 numpy 数组会稍微减慢。

关于python - 了解 numpy 数组的运行时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38273975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com