2016-05-30 87 views
2

我对Python中的numpy/slicing有一些疑问。Numpy切片结果与循环不同

任何人都可以解释,为什么下面的循环和切片方法不会导致相同的B?

for n in range(1,N-1): 
    B[n,i] = -(2*x[n,i] - x[n-1,i] - x[n+1,i]) 

B[1:N-2,i] = -(2*x[1:N-2,i] - x[0:N-3,i] - x[2:N-1,i]) 
+0

无论你的情况如何,Hm范围从1,2到N-2。许多切片和索引在没有更多上下文的情况下让我感到恼火。是否有可能提供一个简短的最小完整的Python脚本,说N == 4练习这两种算法?那太好了! – Dilettant

回答

2

由于范围右侧非包容性,我认为你必须改变你的numpy的代码

B[1:N-1,i] = -(2*x[1:N-1,i] - x[0:N-2,i] - x[2:N,i]) 

,使其循环版本相匹配。