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]]
"""