【发布时间】:2020-10-19 05:18:21
【问题描述】:
我在下面编写了这个 for 循环程序,我逐个元素地遍历数组,并对这些元素进行一些数学运算。一旦计算出数学,它就会被存储到另一个数组中。
for i in range(0, 1024):
x[i] = a * data[i]+ b * x[(i-1)] + c * x[(i-2)]
所以在我的程序中,a、b 和 c 只是标量数。数据和 x 是数组。数据的数组大小为 1024,每个元素中都填充有数字。 X 也是一个大小为 1024 的数组,但最初用全零填充。为了计算 x 的新元素,我使用 x 的前两个元素。最初前两个是 0 和 0,因为它从 x 零数组中获取最后两个元素。我将 data 的当前元素乘以 a,将 x 的最后一个元素乘以 b,并将 x 的倒数第二个元素乘以 c。然后我将所有内容相加并将其保存到 x 的当前元素中。然后我对 data 和 x 中的每个元素做同样的事情。
这个循环程序有效,但我想知道是否有更快的方法来做到这一点?也许使用 numpy 函数的组合,如 cumsum 或点积?有人可以帮助我使程序更快吗?谢谢!
【问题讨论】:
-
这似乎会失败 - 你得到 i=0 和 1 的负索引
-
我认为不可能。即使使用循环,Numpy 数组也可能会更快
-
如果您正在寻找关于工作代码的反馈/建议,那么codereview.stackexchange.com 是更合适的发布位置。
-
Numpy 是提高速度的好选择
-
您不必担心负索引,因为我在循环之前定义了 x = np.zeros(1024)。所以 x[-1] = 0 和 x[-2] = 0 无论如何,因为在 numpy 数组中,如果你采用数组的负索引,它会向后工作。循环根本不会失败。我只想知道有没有办法不用for循环来写?
标签: python arrays numpy loops filter