假设我想使用线性插值将形状数组(100,100,100)调整为形状数组(57,57,57)。
基本上我需要一个函数,它采用带有形状S的n-dim数组,然后将其转换而不会抱怨具有相同维数但具有不同形状的数组S'使用插值。
用numpy和scipy做一个简单快捷的方法吗? 我找到了像1d插值,2d插值,网格插值等东西,但它们需要线性空间,而我真的不懂。
答案 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阵列的大小。
希望有所帮助