用线性插值调整numpy ndarray的大小

时间:2014-03-14 11:49:17

标签: python arrays numpy scipy interpolation

假设我想使用线性插值将形状数组(100,100,100)调整为形状数组(57,57,57)。

基本上我需要一个函数,它采用带有形状S的n-dim数组,然后将其转换而不会抱怨具有相同维数但具有不同形状的数组S'使用插值。

用numpy和scipy做一个简单快捷的方法吗? 我找到了像1d插值,2d插值,网格插值等东西,但它们需要线性空间,而我真的不懂。

1 个答案:

答案 0 :(得分:3)

您可以使用scipy.interpolate

中的griddata方法
from scipy.interpolate import griddata

让我们说你的3D阵列由:

给出
array3d

您需要重塑数据并使用原始索引或点坐标

创建另一个数组
N=100
array3DAux = array3D.reshape(N**3)

# ijk is an (N**3,3) array with the indexes of the reshaped array.
ijk = mgrid[0:N,0:N,0:N].reshape(3,N**3).T

现在,您可以创建想要找到新插值点的新网格。

#In your case 57 points
n = 57j
i,j,k = mgrid[0:N:n,0:N:n,0:N:n]

有3种插值方法最接近,线性和立方 如下

newArray3D_z0 = griddata(ijk,array3DAux,(i,j,k),method="nearest")
newArray3D_z1 = griddata(ijk,array3DAux,(i,j,k),method="linear")
newArray3D_z2 = griddata(ijk,array3DAux,(i,j,k),method="cubic")

在这种情况下,它可以减少或增加3D阵列的大小。

希望有所帮助