Interpolacja / podpróbkowanie danych 3D w Pythonie bez VTK
To, co chcę zrobić, jest raczej proste, ale jak dotąd nie znalazłem prostego podejścia:
Mam prostoliniową siatkę 3D z wartościami zmiennoprzecinkowymi (dlatego 3 osie współrzędnych -1D macierzy numerycznych - dla centrów komórek siatki i trójwymiarowa tablica liczbowa o odpowiednim kształcie z wartością dla każdego środka komórki) i chcę interpolować (lub możesz nazwać to podpróbką) całą tę tablicę do podpróbkowanej tablicy (np. współczynnik wielkości 5) z interpolacją liniową. Wszystkie podejścia, które widziałem do tej pory, obejmują interpolację 2D, a następnie 1D lub sztuczki VTK, które raczej nie używają (przenośność).
Czy ktoś mógłby zaproponować podejście, które byłoby równoznaczne z pobraniem komórek 5x5x5 w tym samym czasie w tablicy 3D, uśrednieniem i zwróceniem tablicy 5 razy mniejszej w każdym kierunku?
Z góry dziękuję za wszelkie sugestie
EDYTOWAĆ: Oto jak wyglądają dane, „d” to tablica 3D reprezentująca trójwymiarową siatkę komórek. Każda komórka ma skalarną wartość pływaka (ciśnienie w moim przypadku), a „x”, „y” i „z” to trzy tablice 1D zawierające współrzędne przestrzenne komórek każdej komórki (zobacz kształty i sposób, w jaki tablica „x” wygląda jak)
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 ])
To, co chcę zrobić, to utworzyć tablicę 3D z powiedzmy kształtem 90x90x210 (mniej więcej zmniejszamy o współczynnik 2), najpierw podpróbkując współrzędne z osi na macierzach o powyższych wymiarach, a następnie „interpolując” dane 3D do tego szyk. Nie jestem pewien, czy „interpolacja” jest właściwym terminem. Próbkowanie w dół? Uśrednianie? Oto kawałek danych 2D: