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 v
和 w
的行为类似于标量符号 x
和 y
,但它们并非如此。
有没有一种方法可以通过插入 v
和 w
的向量来计算 v + w
这样的表达式?
我认为您正在寻找 as_explicit
,这是一种将 矩阵表达式 转换为 显式矩阵 [=19] 的方法=].
(v + w).subs({v: sy.Matrix([2,2]), w: sy.Matrix([3,3])}).as_explicit()
是Matrix([[5], [5]])
我在 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 v
和 w
的行为类似于标量符号 x
和 y
,但它们并非如此。
有没有一种方法可以通过插入 v
和 w
的向量来计算 v + w
这样的表达式?
我认为您正在寻找 as_explicit
,这是一种将 矩阵表达式 转换为 显式矩阵 [=19] 的方法=].
(v + w).subs({v: sy.Matrix([2,2]), w: sy.Matrix([3,3])}).as_explicit()
是Matrix([[5], [5]])