sympy 中的 MatrixSymbol 替换

MatrixSymbol substitution in sympy

我在 sympy 中替换 MatrixSymbols 时遇到问题。这是一个基本的代码示例:

>>> import sympy as sy
>>> x, y = sy.symbols('x y')
>>> v = sy.MatrixSymbol('v', 2, 1)
>>> w = sy.MatrixSymbol('w', 2, 1)
>>> 2 + 3
5
>>> (x + y).subs({x: 2, y: 3})
5
>>> sy.Matrix([2,2]) + sy.Matrix([3,3])
Matrix([
[5],
[5]])
>>> (v + w).subs({v: sy.Matrix([2,2]), w: sy.Matrix([3,3])})
Matrix([
[2],
[2]]) + Matrix([
[3],
[3]])
>>> (v + w).subs({v: sy.Matrix([2,2]), w: sy.Matrix([3,3])}).evalf()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-9-25398137decd> in <module>()
----> 1 (v+w).subs({v: sy.Matrix([2,2]), w: sy.Matrix([3,3])}).evalf()

AttributeError: 'MatAdd' object has no attribute 'evalf'

我希望 MatrixSymbols vw 的行为类似于标量符号 xy,但它们并非如此。

有没有一种方法可以通过插入 vw 的向量来计算 v + w 这样的表达式?

我认为您正在寻找 as_explicit,这是一种将 矩阵表达式 转换为 显式矩阵 [=19] 的方法=].

(v + w).subs({v: sy.Matrix([2,2]), w: sy.Matrix([3,3])}).as_explicit()

Matrix([[5], [5]])