Interpolation / Unterabtastung von 3D-Daten in Python ohne VTK
Was ich tun möchte, ist ziemlich einfach, aber ich habe bisher keinen einfachen Ansatz gefunden:
Ich habe ein geradliniges 3D-Gitter mit Float-Werten (daher 3 Koordinatenachsen -1D-Numpy-Arrays- für die Zentren der Gitterzellen und ein 3D-Numpy-Array mit der entsprechenden Form mit einem Wert für jedes Zellzentrum) und möchte interpolieren (oder Sie können dieses gesamte Array als Unterabtastung (zB Größenfaktor 5) mit linearer Interpolation bezeichnen. Alle Ansätze, die ich bisher gesehen habe, beinhalten 2D- und dann 1D-Interpolation oder VTK-Tricks, die ich lieber nicht benutze (Portabilität).
Könnte jemand einen Ansatz vorschlagen, der der gleichzeitigen Verwendung von 5 x 5 x 5 Zellen im 3D-Array entspricht und die Mittelung und Rückgabe eines Arrays in jede Richtung um das Fünffache verringert?
Vielen Dank im Voraus für alle Vorschläge
BEARBEITEN: Die Daten sehen folgendermaßen aus: 'd' ist ein 3D-Array, das ein 3D-Gitter von Zellen darstellt. Jede Zelle hat einen skalaren Gleitkommawert (Druck in meinem Fall) und 'x', 'y' und 'z' sind drei 1D-Arrays, die die räumlichen Koordinaten der Zellen jeder Zelle enthalten (siehe die Formen und wie das 'x'-Array sieht aus wie)
In [42]: x.shape
Out[42]: (181L,)
In [43]: y.shape
Out[43]: (181L,)
In [44]: z.shape
Out[44]: (421L,)
In [45]: d.shape
Out[45]: (181L, 181L, 421L)
In [46]: x
Out[46]:
array([-0.410607 , -0.3927568 , -0.37780656, -0.36527296, -0.35475321,
-0.34591168, -0.33846866, -0.33219107, -0.32688467, -0.3223876 ,
...
0.34591168, 0.35475321, 0.36527296, 0.37780656, 0.3927568 ,
0.410607 ])
Ich möchte ein 3D-Array mit einer Form von beispielsweise 90 x 90 x 210 erstellen (ungefähr um den Faktor 2 verkleinert), indem ich zuerst die Koordinaten der Achsen von Arrays mit den oben genannten Abmessungen abtaste und dann die 3D-Daten 'interpoliere' Array. Ich bin mir nicht sicher, ob 'interpolieren' der richtige Begriff ist. Downsampling? Mittelwertbildung? Hier ist ein 2D-Ausschnitt der Daten: