SymPy矩阵列表的总和

时间:2018-03-15 05:27:33

标签: python sympy

我的python列表包含sympy矩阵对象,我需要将它们全部加起来。 如果所有列表元素都只是符号,那么在python中使用内置的求和函数就可以了。

import sympy as sp
x = sp.symbols('x')
ls = [x, x+1, x**2]
print(sum(ls))

>>> x**2 + 2*x + 1

但是对于矩阵类型的元素,sum函数看起来不起作用。

import sympy as sp
ls = [sp.eye(2), sp.eye(2)*5, sp.eye(2)*3]
print(sum(ls))

>>> TypeError: cannot add <class 'sympy.matrices.dense.MutableDenseMatrix'> and <class 'int'>

如何解决此问题?

2 个答案:

答案 0 :(得分:2)

这就是为什么Python sum function有一个可选的&#34; start&#34;参数:所以你可以使用&#34;零对象&#34;来初始化它。你正在添加的那种。在这种情况下,使用零矩阵。

>>> print(sum(ls, sp.zeros(2)))
Matrix([[9, 0], [0, 9]])

答案 1 :(得分:0)

我真的不知道内置函数sum是如何工作的,也许它看起来像这样。

def _sum(data):
    total = 0
    for i in data:
        total += i
    return total

现在考虑以下代码行。

>>> import sympy
>>> x = sympy.symbols('x')
>>> x
x
>>> print(0+x)
x
>>> x = sympy.symbols('x')
>>> matrix=sympy.eye(3)
>>> matrix
Matrix([
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])
>>> print(0+x)
x
>>> print(0+matrix)
Traceback (most recent call last):
  File "<pyshell#50>", line 1, in <module>
    print(0+matrix)
  File "C:\Python36\lib\site-packages\sympy\core\decorators.py", line 132, in binary_op_wrapper
    return func(self, other)
  File "C:\Python36\lib\site-packages\sympy\matrices\common.py", line 2061, in __radd__
    return self + other
  File "C:\Python36\lib\site-packages\sympy\core\decorators.py", line 132, in binary_op_wrapper
    return func(self, other)
  File "C:\Python36\lib\site-packages\sympy\matrices\common.py", line 1964, in __add__
    raise TypeError('cannot add %s and %s' % (type(self), type(other)))
TypeError: cannot add <class 'sympy.matrices.dense.MutableDenseMatrix'> and <class 'int'>
>>> 

我们可以得出的结论是,您可以向整数添加任何sympy.core.symbol.Symbol(顺便提一下还有更多如Sum和Pow)但不是sympy.matrices.dense.MutableDenseMatrix