Interpolación / submuestreo de datos 3D en python sin VTK
Lo que quiero hacer es bastante simple, pero hasta ahora no he encontrado un enfoque directo:
Tengo una cuadrícula rectilínea 3D con valores flotantes (por lo tanto, 3 ejes de coordenadas -1D matrices numpy- para los centros de las celdas de la cuadrícula y una matriz numpy 3D con la forma correspondiente con un valor para cada centro de celda) y quiero interpolar (o puede llamarla submuestra) esta matriz completa a una matriz submuestreada (por ejemplo, factor de tamaño de 5) con interpolación lineal. Todos los enfoques que he visto hasta ahora implican interpolación en 2D y luego en 1D o trucos VTK que Id no prefiere usar (portabilidad).
¿Podría alguien sugerir un enfoque que sería equivalente a tomar 5x5x5 celdas al mismo tiempo en la matriz 3D, promediando y devolviendo una matriz 5 veces más pequeña en cada dirección?
Gracias de antemano por cualquier sugerencia
EDITAR: Así es como se ven los datos, 'd' es una matriz 3D que representa una cuadrícula 3D de celdas. Cada celda tiene un valor flotante escalar (presión en mi caso) y 'x', 'y' y 'z' son tres matrices 1D que contienen las coordenadas espaciales de las celdas de cada celda (vea las formas y cómo la matriz 'x' parece)
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 ])
Lo que quiero hacer es crear una matriz 3D con, digamos, una forma de 90x90x210 (aproximadamente una reducción de tamaño por un factor de 2) al sub-muestrear primero las coordenadas de los ejes en las matrices con las dimensiones anteriores y luego "interpolar" los datos 3D para que formación. No estoy seguro si "interpolar" es el término correcto sin embargo. Downsampling? Averaging? Aquí hay una porción 2D de los datos: