You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python幂律拟合维度不匹配问题咨询及代码疑问

问题1:误差维度不匹配的解决方法

CRDB返回的err_sta是二维数组,每一行对应数据点的上下非对称误差(格式为[下误差, 上误差]),而LeastSquares需要一维的对称误差数组,解决方式如下:

  • 取上下误差的平均值,转换为一维数组:
    import numpy as np
    err = np.mean(t_combined.err_sta, axis=1)  # 按行求平均,维度从(1236,2)变为(1236,)
    
  • 若只需要单侧误差(比如仅用上误差或下误差),直接切片提取:
    err = t_combined.err_sta[:, 1]  # 提取上误差
    # 或
    err = t_combined.err_sta[:, 0]  # 提取下误差
    

处理后err就和x、y维度匹配,可以正常传入LeastSquares。

问题2:plt.plot(x, (x, *m.values), label="fit")的作用(及错误)

这行代码写法错误,无法正常生成拟合曲线:

  • 原本的意图应该是用拟合得到的参数m.values(即a和gamma)代入幂律模型,计算每个x对应的拟合y值,然后绘制拟合线。
  • 但当前代码里的(x, *m.values)是把x数组、a、gamma打包成了一个三元组,plt.plot无法识别这种格式作为y轴数据,运行时会抛出类型错误。
  • 正确的写法应该调用你的power_law函数计算拟合y值:
    plt.plot(x, power_law(x, *m.values), label="fit")
    

不过你代码后面已经用更平滑的x_fit绘制了拟合线(红色虚线),这行错误的代码可以直接删除,避免冲突。

另外,代码里还有一处变量名不统一的问题:你用m = Minuit(...)拟合,但后面又写minuit.values.a,应该改成m.values.a和m.values.gamma。

内容的提问来源于stack exchange,提问作者Katie Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 13:30:25