2017-03-31 62 views
1

我有一个关于python索引的问题:我试图用中央差分来估计数组''U'的'dU',并且我通过用一个数组''来初始化'dU' (U),然后应用中心差分,使得dU(i)=(U(i + 1) - U(i-1))/ 2到中心元素。输出'dU'数组目前在向量的末尾给了我两个'nan'条目。任何人都可以解释为什么倒数第二个元素没有被更新?Python中央差异索引

import numpy as np 
U= np.array([1,2,3,4,5,6]) 
dU = np.zeros(len(U)) 
dU[:] = np.NAN 
dU[1:-2] = (U[2:-1]-U[0:-3])/2 

>>> dU 
array([ nan, 1., 1., 1., nan, nan]) 
+0

隐而不宣'范围的第二个值表示第一个元素*不包含?所以'dU [1:-2]'不仅排除'dU [-1]',而且排除'dU [-2]'。 –

回答

0

要有倒数第二个元素包含你需要:

dU[1:-1] = (U[2:]-U[0:-2])/2 
+0

非常感谢! –

+0

欢迎您:) – zipa

0

不回答你的问题,但作为一个有用的提示,你可以用numpy.gradient

>>> np.gradient(np.array([1,2,3,4,5,6])) 
>>> array([ 1., 1., 1., 1., 1., 1.])