使用线性插值调整numpy ndarray大小
假设我想把一个形状为 (100,100,100) 的数组调整成形状为 (57,57,57) 的数组,使用线性插值的方法。
基本上,我需要一个函数,它可以接受一个维度为 n 的数组,形状为 S,然后把它转换成一个维度相同但形状为 S' 的数组,过程中使用插值的方法。
有没有简单又快速的方法可以用 numpy 和 scipy 来实现这个?我看到有一些一维插值、二维插值、网格插值的东西,但它们需要线性空间之类的,我不是很明白这些是什么意思。
1 个回答
3
你可以使用scipy.interpolate里的griddata方法。
from scipy.interpolate import griddata
假设你的三维数组是这样的:
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]
这里有三种插值方法:最近邻、线性和立方插值,具体如下:
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")
在这种情况下,它可以用来缩小或放大你的三维数组的大小。
希望这对你有帮助。