【发布时间】:2020-07-27 13:50:19
【问题描述】:
我正在尝试找到一种模仿以下代码的快速方法(最好不使用for 循环):
# a and b are arrays of the same length
# f is function of 3 scalar variables
res = np.zeros(len(a))
temp = 1
for i in range(len(a)):
temp = f(temp, a[i], b[i])
res[i] = temp
请注意,temp 变量会随着每次迭代而更新。这段代码与 NumPy 的累加机制可以实现的功能非常相似。但是,在我的例子中,函数f 中使用了几个数组。
函数f 可以是这样的
def f(temp, a_scalar, b_scalar):
return temp * a_scalar + b_scalar
【问题讨论】:
-
显示你的 f 函数
-
对于任意 python 函数
f,没有真正的方法可以让它快速,因为 python 必须在每次迭代时运行解释函数f。numpy.ufuncs 可以快速累积,因为它们是用 C 实现的,因此 numpy 不必在 python 中进行循环。如果您想加快某些特定功能f,则可能有一种方法可以使用numpy功能的组合来实现。如果没有,并且您仍然确实需要更快的代码,请考虑用 C 语言编写它并使用ctypes调用它。 -
@mrip。使用 C 或 numba 的另一个原因是,即使对于这个微不足道的例子,数值稳定性也可能是一个问题。几个大数的累积乘积确实会导致一些扩展问题。
标签: python arrays numpy accumulate