我有一个函数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给我的速度做出妥协?
提前致谢
答案 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()