2016-05-30 134 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]) 

,使其循環版本相匹配。