2017-03-31 4 views
1

Ich habe eine Frage zur Python-Indizierung: Ich versuche, die zentrale Differenzierung zu verwenden, um 'dU' von einem Array 'U' zu schätzen und tue dies, indem ich 'dU' mit einem Array von 'initialisiere. nan 'der Länge (U) und dann eine zentrale Differenzierung anwenden, so dass dU (i) = (U (i + 1) - U (i-1))/2 zu den zentralen Elementen. Das ausgegebene 'dU'-Array gibt mir derzeit zwei' nan'-Einträge am Ende des Vektors. Kann jemand erklären, warum das vorletzte Element nicht aktualisiert wird?Python-Indizierung für zentrale Differenzierung

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

Doesn verwenden Gibt der zweite Wert eines Bereichs an, dass das erste Element * nicht * enthalten ist? So schließt 'dU [1: -2] nicht nur' dU [-1] 'sondern auch' dU [-2] 'aus. –

Antwort

0

Um vorletztes Element zu haben eingeschlossen würden Sie brauchen:

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

Perfekter Dank dafür! –

+0

Gern geschehen :) – zipa

0

Ihre Frage nicht beantworten, der Fall ist, sondern als ein hilfreicher Tipp, können Sie einfach numpy.gradient

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