簡體   English   中英

SymPy矩陣列表的總和

[英]Sum of a list of SymPy matrices

我的python列表包含sympy矩陣對象,我需要將它們全部加起來。 如果所有列表元素都只是符號,則在python中使用內置的sum函數可以正常工作。

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

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

但是對於矩陣類型的元素,求和函數似乎不起作用。

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'>

我該如何解決這個問題?

這就是為什么Python的sum函數具有一個可選的“ start”參數的原因:因此,您可以使用要添加的那種“零對象”對其進行初始化。 在這種情況下,矩陣為零。

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

我真的不知道內置函數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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM