【发布时间】:2016-07-08 19:21:14
【问题描述】:
我想知道是否有人可以帮助我理解为什么以下两个程序的运行速度明显不同(第一个需要大约 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)
我需要第二个版本的唯一原因是因为它可以让我查看列表中的所有元素,以便我可以对它们执行其他操作(此示例中未说明)。但这不是我要问的——我问的是为什么第二种形式比第一种慢得多。
谢谢!
【问题讨论】:
-
因为(假设
exp函数是从 numpy 导入的)第一个函数适用于矢量化数据(向量/数组/列等),而第二个函数适用于标量值。 numpy 中的大多数矢量化操作都是使用 Cython 实现的,并且与它们的标量替代方案相比要快得多... -
是
expnp.exp还是math.exp?