Scipy的griddata似乎能够处理这种大小的数据集而不会出现问题:
将numpy导入为np
导入scipy.interpolate
#旧网格
x,y = np.mgrid [0:1:201j,0:1:513j]
z = np.sin(x * 20)*(1j + np.cos(y * 3))** 2#一些数据
#个新网格
x2,y2 = np.mgrid [0.1:0.9:201j,0.1:0.9:513j]
#插值到新网格上
z2 = scipy.interpolate.griddata((x.ravel(),y.ravel()),z.ravel(),(x2,y2),method ='cubic')
在旧的AMD Athlon上,griddata步骤大约需要5秒钟。
如果您的数据在网格上(即,与值z [i,j]对应的坐标为(x [i],y [j])),则可以使用scipy.interpolate.RectBivariateSpline来提高速度
z3 =(scipy.interpolate.RectBivariateSpline(x [:,0],y [0 ,:],z.real)(x2 [:,0],y2 [0 ,:])
+ 1j * scipy.interpolate.RectBivariateSpline(x [:,0],y [0 ,:],z.imag)(x2 [:,0],y2 [0 ,:]))
这需要0.05秒。它的速度要快得多,因为即使您的网格间距不规则,只要网格是矩形的,也可以使用更有效的算法。