scipy.interpolate.RectBivariateSpline的integral函数使用是否正确?
错误原因
你的调用存在两个问题:
RectBivariateSpline.integral的参数顺序理解错误。注意该方法参数不是(xmin, ymin, xmax, ymax)的顺序,官方定义的参数顺序为integral(xa, xb, ya, yb),依次对应x方向积分下限、x方向积分上限、y方向积分下限、y方向积分上限。你传入的(0, 0, 999, 999)相当于x方向从0积分到0,积分区间长度为0,返回0.0是符合计算逻辑的。- 积分预期值计算错误。你传入的x、y坐标序列都是
np.arange(0, 1000, 1),实际覆盖的坐标范围是0到999,插值定义的有效区域面积为999*999=998001,全1矩阵的正确积分结果就是998001,并非1000000。如果需要得到1000000的积分结果,坐标序列要延伸到1000,即使用np.arange(0, 1001, 1)作为x、y坐标输入。
修正后的测试代码如下:
import numpy as np from scipy import interpolate spline = interpolate.RectBivariateSpline( np.arange(0, 1000, 1), np.arange(0, 1000, 1), np.ones((1000, 1000)), kx=1, ky=1, ) # 按正确参数顺序传入积分上下限 print(spline.integral(0, 999, 0, 999)) # 运行输出:998001.0
关于提交issue的建议
该问题属于接口参数顺序理解偏差导致的调用错误,不是scipy库本身的功能缺陷,不适合作为issue提交到官方仓库。
内容的提问来源于stack exchange,提问作者Nevsden
相关产品推荐
相关产品推荐

