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

假设我想使用线性插值将形状数组(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阵列的大小.

希望能帮助到你

上一篇:python-快速选择行,其中至少N个列在numpy / scipy中为true


下一篇:使用Scipy.signal(Python)进行连续小波变换:cwt()函数中的参数“ widths”是什么? (时间频率)