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

SymPy矩阵替换遇TypeError: unhashable type: 'MutableDenseMatrix'错误

问题分析与解决

错误根源:变量名冲突

你遇到的TypeError: unhashable type: 'MutableDenseMatrix'以及b值无法替换的问题,核心是变量名重复覆盖:

  • 你先定义了符号b = symbols('b', real=true)
  • 随后又把同名变量b赋值为矩阵b = Matrix([e,f])
    这导致原本的符号b被矩阵对象覆盖,后续A.subs({..., b:-1})中的b是不可哈希的矩阵而非原符号,触发错误的同时,矩阵A里的符号b也无法被正确匹配替换。

修复方案

把存储矩阵的变量名改成和符号不冲突的名称,避免覆盖符号变量。

修正后的代码

from sympy import symbols, Matrix

x1,x2 = symbols('x1,x2', real=True)
a,b,c,d,e,f = symbols('a,b,c,d,e,f', real=True)

x = Matrix([x1,x2])
xT = x.T

A = Matrix([[a,b],[c,d]])
# 改用不同变量名存储矩阵,避免覆盖符号b
b_vec = Matrix([e,f])
qx = xT * A*x + xT*b_vec

# 此时subs里的b是原符号,可正确替换
A = A.subs({a:2, b:-1, c:-1, d:2})
print(A)

运行结果

修正后执行代码,矩阵A会被正确替换为:

Matrix([[2, -1], [-1, 2]])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 11:17:04