Interpolação / subamostragem de dados 3D em python sem VTK

O que eu quero fazer é bastante simples, mas ainda não encontrei uma abordagem direta:

Eu tenho uma grade retilínea 3D com valores de flutuação (portanto, 3 eixos coordenados - matrizes ND numpy - para os centros das células da grade e um array 3D numpy com a forma correspondente com um valor para cada centro de célula) e eu quero interpolar (ou você pode chamá-lo subamostra) toda esta matriz para uma matriz subamostrada (por exemplo, fator de tamanho de 5) com interpolação linear. Todas as abordagens que vi até aqui envolvem 2D e, em seguida, 1D interpolação ou truques VTK que eu prefiro não usar (portabilidade).

Alguém poderia sugerir uma abordagem que seria o equivalente a tomar 5x5x5 células ao mesmo tempo na matriz 3D, calculando a média e retornando uma matriz 5 vezes menor em cada direção?

Agradecemos antecipadamente por quaisquer sugestões

EDITAR: Veja como são os dados, 'd' é um array 3D representando uma grade 3D de células. Cada célula tem um valor de flutuação escalar (pressão no meu caso) e 'x', 'y' e 'z' são três arrays 1D contendo as coordenadas espaciais das células de cada célula (veja as formas e como o array '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  ])

O que eu quero fazer é criar um array 3D com um formato de 90x90x210 (reduzir o tamanho por um fator de 2) primeiro subamostrando as coordenadas dos eixos em arrays com as dimensões acima e então 'interpolando' os dados 3D para aquele array. Eu não tenho certeza se "interpolação" é o termo certo embora. Downsampling? Média? Aqui está uma fatia 2D dos dados:

questionAnswers(2)

yourAnswerToTheQuestion