我有一个 363 x x 190 y 点的数据集,带有一个关联的函数值,我想将其集成到多个不同的子区域中。我尝试创建一个 SciPy interp2d
函数来集成;然而, 即使使用线性插值创建该函数也花费了 2 个多小时(尚未完成) 。
执行此任务的更好方法是什么?
下面的一些片段...
在下面的 convert_RT_to_XY
函数中,imb/jmb 是我转换为笛卡尔边界的 r,theta 网格边界。
后来,在我的代码中,我将网格边界 (imb/jmb) 转换为网格中心值 (imm,jmm),转换为向量 (iX, iY),将我的函数转换为向量 (iZ),然后尝试使我的插值函数。
# Convert R, T mesh vectors to X, Y mesh arrays.
def convert_RT_to_XY(imb, jmb):
R, T = np.meshgrid(imb,jmb)
X = R * np.cos(np.radians(T*360))
Y = R * np.sin(np.radians(T*360))
return(X, Y)
...
imm = imb[:-1]+np.divide(np.diff(imb),2)
jmm = jmb[:-1]+np.divide(np.diff(jmb),2)
iX, iY = convert_RT_to_XY(imm, jmm)
iX = np.ndarray.flatten(iX)
iY = np.ndarray.flatten(iY)
iZ = np.ndarray.flatten(plot_function)
f = interpolate.interp2d(iX, iY, iZ, kind='linear')
最后,我想执行:
result = dblquad(f, 10, 30,
lambda x: 10,
lambda x: 30))
最佳答案
查看 SciPy 的 RectBivariateSpline
。如果您无论如何都将数据放在笛卡尔网格上,它的执行速度比 interp2D
快得多
关于python - 如何最好地对二维点数据进行表面积分?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31104428/