如何在2D点数据上最佳地执行曲面积分?

时间:2015-06-28 20:29:07

标签: python numpy scipy interpolation

我的数据集为363 x-乘190 y-points,并且我将在多个不同的子区域中集成相关的功能值。我已尝试创建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))

1 个答案:

答案 0 :(得分:2)

查看SciPy的RectBivariateSpline。如果您将数据放在笛卡尔网格上,它的执行速度比interp2D

快得多