假设我想使用线性插值将形状数组(100,100,100)调整为形状数组(57,57,57).
基本上,我需要一个函数,该函数采用形状为S的n维数组,并通过内插将其变换为不带有维数但形状为S’的数组.
是否有一种简单快速的方法来用numpy和scipy做到这一点?
我发现了诸如1d插值,2d插值,网格插值之类的东西,但是它们需要线性空间,而我并不是很了解.
解决方法:
您可以使用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阵列的大小.
希望能帮助到你
标签:scipy,arrays,python,numpy,interpolation
来源: https://codeday.me/bug/20191122/2056071.html