Sympy中的MatrixSymbol替换

时间:2018-07-17 17:53:27

标签: matrix sympy substitution

我在用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,但它们却不一样。

是否可以通过插入v + wv的向量来评估w之类的表达式?

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找as_explicit,它是矩阵表达式的一种方法,它将其转换为显式矩阵

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

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