scipy.interpolate.BivariateSpline.

__call__#

BivariateSpline.__call__(x, y, dx=0, dy=0, grid=True)[Quelle]#

Evaluieren des Splines oder seiner Ableitungen an gegebenen Positionen.

Parameter:
x, yarray_like

Eingabekoordinaten.

Wenn grid False ist, werten Sie die Spline an den Punkten (x[i], y[i]), i=0, ..., len(x)-1 aus. Die Standard-Numpy-Broadcasting wird befolgt.

Wenn grid True ist: Werten Sie die Spline an den durch die Koordinaten-Arrays x und y definierten Gitterpunkten aus. Die Arrays müssen aufsteigend sortiert sein.

Die Reihenfolge der Achsen ist konsistent mit np.meshgrid(..., indexing="ij") und inkonsistent mit der Standardreihenfolge np.meshgrid(..., indexing="xy").

dxint

Ordnung der x-Ableitung

Hinzugefügt in Version 0.14.0.

dyint

Ordnung der y-Ableitung

Hinzugefügt in Version 0.14.0.

gridbool

Ob die Ergebnisse auf einem Gitter, das von den Eingabearrays aufgespannt wird, oder an Punkten, die durch die Eingabearrays spezifiziert werden, ausgewertet werden sollen.

Hinzugefügt in Version 0.14.0.

Beispiele

Angenommen, wir wollen eine exponentiell abfallende Funktion in 2 Dimensionen bilinear interpolieren.

>>> import numpy as np
>>> from scipy.interpolate import RectBivariateSpline

Wir sampeln die Funktion auf einem groben Gitter. Beachten Sie, dass die Standard-`indexing="xy"` von `meshgrid` nach der Interpolation zu einem unerwarteten (transponierten) Ergebnis führen würde.

>>> xarr = np.linspace(-3, 3, 100)
>>> yarr = np.linspace(-3, 3, 100)
>>> xgrid, ygrid = np.meshgrid(xarr, yarr, indexing="ij")

Die zu interpolierende Funktion fällt entlang einer Achse schneller ab als entlang der anderen.

>>> zdata = np.exp(-np.sqrt((xgrid / 2) ** 2 + ygrid**2))

Als Nächstes sampeln wir auf einem feineren Gitter mittels Interpolation (kx=ky=1 für bilinear).

>>> rbs = RectBivariateSpline(xarr, yarr, zdata, kx=1, ky=1)
>>> xarr_fine = np.linspace(-3, 3, 200)
>>> yarr_fine = np.linspace(-3, 3, 200)
>>> xgrid_fine, ygrid_fine = np.meshgrid(xarr_fine, yarr_fine, indexing="ij")
>>> zdata_interp = rbs(xgrid_fine, ygrid_fine, grid=False)

Und prüfen durch Plotten beider Ergebnisse, ob sie mit der Eingabe übereinstimmen.

>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
>>> ax1 = fig.add_subplot(1, 2, 1, aspect="equal")
>>> ax2 = fig.add_subplot(1, 2, 2, aspect="equal")
>>> ax1.imshow(zdata)
>>> ax2.imshow(zdata_interp)
>>> plt.show()
../../_images/scipy-interpolate-BivariateSpline-__call__-1.png