在进行矢量运算时,在Numpy中组合数组的不同元素

时间:2015-06-19 06:55:56

标签: python arrays numpy

我有一个函数f,我用它来重复演化Numpy数组z。因此我的代码如下所示:

for t in range(100):
    z = f(z)

但是,现在我想在进化的同时组合数组元素。例如,在简单的Python中,我想做类似的事情:

N = len(z)
for t in range(100):
    for i in range(len(z)):
         z_new[i] = f(z[i]) + z[(i-1)%N] + z[(i+1)%N]
    z = z_new

如何在Numpy矢量操作中实现同样的目的,这样我就不会为Numpy给我的速度做出妥协?

提前致谢

1 个答案:

答案 0 :(得分:2)

您可以来回滚动 以获得相同的结果。

Z = f(z)
Z = np.roll(Z, 1) + z
Z = np.roll(Z, -2) + z
z = np.roll(Z, 1)

我还首先考虑过切片,但是当我找到切片的时候就去了np.roll

@ hpaulj的评论提示我想出了一个切片解决方案:

q = np.array([1,2,3,4,5])
Q = f(q)
# operate on the middle
Q[1:] += q[:-1]
Q[:-1] += q[1:]
# operate on the ends
Q[0] += q[-1]
Q[-1] += q[0]

q = Q.copy()