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
相关产品推荐
相关产品推荐

