【发布时间】:2017-03-25 21:53:07
【问题描述】:
我经常在我的代码中使用 numpy 数组。它的速度和方便的索引规则非常有用。现在,我正在寻找如何避免“for”循环以缩短执行时间。为简单起见,假设我们有两个向量(名为 a 和 b),每个向量有 10 个元素。第二个向量(b) 的第一个值等于 1,然后每个第 n 个值等于 '(b[n-1]*13+a[n])/14'。在'for'循环的帮助下,我可以像下面这样写:
import numpy as np
a = np.random.random(10)
b = np.ones(10)
for i in range(1, b.shape[0]):
b[i] = (b[i-1]*13 + a[i]) / 14
所以,我的问题是如何在没有 for 循环的情况下更快地做同样的事情?如何使用 numpy 向量化来执行该操作?提前致谢!
【问题讨论】:
-
看起来每个循环都依赖于它之前的循环,如果你知道后面的值之一,你可以在那时并行化它,但实际上这更像是一个组合问题,而不是编程问题。
-
this question的可能重复
-
如果你必须使用 for 循环,看看 cython。特别是对于这样一个简单的示例,Cython 是一个不错的选择。
-
这个问题正在成为一个常见问题解答:stackoverflow.com/questions/26267809/…、stackoverflow.com/questions/21336794/…、stackoverflow.com/questions/21391467/…、stackoverflow.com/questions/27568462/… 等。这些只是 我的 答案;还有很多其他人写的。
标签: arrays python-3.x numpy iteration vectorization