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

使用np.linalg.lstsq遇'tuple'一元运算符错误,求解原因

问题原因与解决办法
  • 核心差异:两个函数的返回值类型不同
    • np.linalg.solve:当输入的矩阵C可逆时,直接返回方程的解数组,所以你能直接对结果加负号。
    • np.linalg.lstsq:不管矩阵是否可逆,返回的是一个元组,里面包含4个元素:(解数组, 残差, 矩阵秩, 奇异值)。你直接对这个元组用一元负号-,自然会触发TypeError——元组不支持这种操作。
  • 修正代码的正确方式
    先从返回的元组里提取出解数组,再应用负号,比如:
    # 方法1:通过索引提取
    lstsq_result = np.linalg.lstsq(C, D, rcond=None)
    x = -lstsq_result[0]
    
    # 方法2:解包忽略其他返回值
    x, *_ = np.linalg.lstsq(C, D, rcond=None)
    x = -x
    
  • 补充说明
    你的矩阵C是可逆方阵(不然np.linalg.solve会报错),所以lstsq得到的解和solve的解完全一致,只是lstsq额外返回了残差、秩等信息,这是两者设计定位的区别——lstsq更通用,能处理超定/欠定方程组,而solve只针对可逆方阵的精确解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:00:52