当前位置: 代码迷 >> python >> 用线性插值调整numpy ndarray的大小
  详细解决方案

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

热度:48   发布时间:2023-06-27 21:54:00.0

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

基本上我需要一个函数,它采用带有形状S的n-dim数组,并且在没有抱怨的情况下将其转换为具有相同维数但使用插值的不同形状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阵列的大小。

希望能帮助到你