Interpolation von NaN-Zellen in 2D-Matrix
Verfasst: Dienstag 21. September 2010, 10:56
Suche einen geeignete numpy/Scipy Methode zum Interpolieren von nicht gesetzten Werten (np.NaN) in einem 2D-Numpy array. Scipy interp2D liefert leider NaN auf dem ganzen Ergebnisarray sobald ein einzelner Wert des Eingagsarrays auf NaN gesetzt wird. Stattdessen sollte die Funktion eigentlich den Wert "8" auf der nicht gesetzten Zelle interpolieren.
Hat jemand eine Idee ?
Gibt es evtl. andere Lösungen, z.B. über MatPlotLib oder image ?
Hier ist mein Code auf der Basis von interp2D :
Hat jemand eine Idee ?
Gibt es evtl. andere Lösungen, z.B. über MatPlotLib oder image ?
Hier ist mein Code auf der Basis von interp2D :
Code: Alles auswählen
import numpy as np
from scipy import interpolate
vX = np.linspace(-5, 5, 11)
vY = vX
vvX, vvY = np.meshgrid(vX, vY)
vvZ = 10 + vvX + vvY # init all valid data
vvZ[4, 4] = np.NaN # set single cell to not measured -> causes NaN in interpolated matrix vvZnew !!!
"""
vvZ
array([[ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.],
[ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11.],
[ 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.],
[ 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13.],
[ 4., 5., 6., 7., NaN, 9., 10., 11., 12., 13., 14.],
[ 5., 6., 7., 8., 9., 10., 11., 12., 13., 14., 15.],
[ 6., 7., 8., 9., 10., 11., 12., 13., 14., 15., 16.],
[ 7., 8., 9., 10., 11., 12., 13., 14., 15., 16., 17.],
[ 8., 9., 10., 11., 12., 13., 14., 15., 16., 17., 18.],
[ 9., 10., 11., 12., 13., 14., 15., 16., 17., 18., 19.],
[ 10., 11., 12., 13., 14., 15., 16., 17., 18., 19., 20.]])
"""
#vvZmasked=np.ma.masked_invalid(vvZ) # masking does not help
myFunc = interpolate.interp2d(vX, vY, vvZ, kind='linear')
vXnew = np.linspace(-5, 5, 11) # keep original grid
#vXnew = np.linspace(-5, 5, 21) # expand original grid
vYnew = vXnew
# Returns the cross product
vvZnew = np.round(myFunc(vXnew, vYnew)) # interpolated z array
print vvZ
print vvZnew
"""
vvZnew
[[ NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN]
[ NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN]
[ NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN]
[ NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN]
[ NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN]
[ NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN]
[ NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN]
[ NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN]
[ NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN]
[ NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN]
[ NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN]]
"""