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

使用np.linalg.lstsq求解多变量问题报错排查

代码错误排查与修正

核心错误点

  • X矩阵构造逻辑错误:
    原代码中x按特征维度存储数据(3个特征,每个特征对应8个样本值),但最小二乘要求X矩阵每行对应一个样本(每行包含该样本的所有特征:常数项1、ln(W)、ln(H))。同时错误添加了np.ones(len(x)),len(x)为3,生成的数组长度与样本数8不匹配,触发形状冲突。
  • vstack与转置误用:
    原代码的vstack和转置操作导致X矩阵形状错误,无法与目标变量y(长度8)匹配,进而引发求解错误。

修正后的代码

方式一:直接构造样本行

import numpy as np

# 构造8行3列的特征矩阵X,每行对应[1, ln(W_i), ln(H_i)]
X = np.array([
    [1, np.log(70), np.log(170)],
    [1, np.log(75), np.log(165)],
    [1, np.log(77), np.log(175)],
    [1, np.log(80), np.log(183)],
    [1, np.log(82), np.log(188)],
    [1, np.log(84), np.log(187)],
    [1, np.log(87), np.log(190)],
    [1, np.log(90), np.log(197)]
])

# 目标变量:ln(A)的数组
y = np.array([
    np.log(1.86), np.log(1.88), np.log(1.92),
    np.log(2.15), np.log(2.18), np.log(2.16),
    np.log(2.25), np.log(2.29)
])

# 最小二乘求解参数ln(a)、b、c
lna, b, c = np.linalg.lstsq(X, y, rcond=None)[0]
# 还原原参数a
a = np.exp(lna)

print(f"ln(a) = {lna:.4f}, b = {b:.4f}, c = {c:.4f}")
print(f"拟合得到的a值:{a:.4f}")

方式二:基于原有特征序列构造

import numpy as np

# 提取各特征的样本值
const_term = np.ones(8)
lnW = np.array([np.log(70), np.log(75), np.log(77), np.log(80), np.log(82), np.log(84), np.log(87), np.log(90)])
lnH = np.array([np.log(170), np.log(165), np.log(175), np.log(183), np.log(188), np.log(187), np.log(190), np.log(197)])

# 按列堆叠成8行3列的X矩阵
X = np.column_stack([const_term, lnW, lnH])

y = np.array([np.log(1.86), np.log(1.88), np.log(1.92), np.log(2.15), np.log(2.18), np.log(2.16), np.log(2.25), np.log(2.29)])

lna, b, c = np.linalg.lstsq(X, y, rcond=None)[0]
a = np.exp(lna)

print(f"ln(a) = {lna:.4f}, b = {b:.4f}, c = {c:.4f}")
print(f"拟合得到的a值:{a:.4f}")

关键说明

  • 修正后的X矩阵形状为(8,3),与y的形状(8,)匹配,符合最小二乘求解的输入要求。
  • 通过np.exp(lna)可以还原原方程中的参数a,因为拟合结果lna是ln(a)的估计值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:50:38