Problem mit 2D-interpolation in SciPy, nicht-rechteckiges-raster

Ich habe versucht, zu verwenden scipy.interpolieren.bisplrep() und scipy.interpolieren.interp2d() zu finden interpolants für Daten auf meinem (218x135) 2D-sphärisch-polar-Gitter. Dieser E-pass 2D-arrays, X und Y die kartesischen Positionen von meiner grid-Knoten. Ich erhalte Fehler wie den folgenden (für linear-interp. mit interp2d):

"Warnung: Keine mehr Knoten Hinzugefügt werden können, da die zusätzlichen Knoten Zusammenfallen würde
mit einem alten. Wahrscheinlich Ursache: zu kleine oder zu große Gewicht
um eine ungenaue Daten zeigen. (fp>s)
kx,ky=1,1 nx,ny=4,5 m=29430 fp=1390609718.902140 s=0.000000"

Bekomme ich ein ähnliches Ergebnis für bivariate splines mit dem default-Wert der smoothing-parameter s usw. Meine Daten glatt sind. Ich angehängt habe meinen code unten in den Fall mache ich offensichtlich etwas falsch.

Irgendwelche Ideen?
Danke!
Kyle

class Field(object):
  Nr = 0
  Ntheta = 0
  grid = np.array([])

  def __init__(self, Nr, Ntheta, f):
    self.Nr = Nr
    self.Ntheta = Ntheta
    self.grid = np.empty([Nr, Ntheta])
    for i in range(Nr):
      for j in range(Ntheta):
        self.grid[i,j] = f[i*Ntheta + j]


def calculate_lines(filename):
  ri,ti,r,t,Br,Bt,Bphi,Bmag = np.loadtxt(filename, skiprows=3,\
    usecols=(1,2,3,4,5,6,7,9), unpack=True)
  Nr = int(max(ri)) + 1
  Ntheta = int(max(ti)) + 1

  ### Initialise coordinate grids ###
  X = np.empty([Nr, Ntheta])
  Y = np.empty([Nr, Ntheta])
  for i in range(Nr):
    for j in range(Ntheta):
      indx = i*Ntheta + j
      X[i,j] = r[indx]*sin(t[indx])
      Y[i,j] = r[indx]*cos(t[indx])

  ### Initialise field objects ###
  Bradial = Field(Nr=Nr, Ntheta=Ntheta, f=Br)

  ### Interpolate the fields ###
  intp_Br = interpolate.interp2d(X, Y, Bradial.grid, kind='linear')

  #rbf_0 = interpolate.Rbf(X,Y, Bradial.grid, epsilon=2)

  return
InformationsquelleAutor Kyle | 2010-08-19
Schreibe einen Kommentar