Próbuję zrobić kilka symbolicznych obliczeń macierzy z sympy. Moim celem jest uzyskanie symbolicznej reprezentacji wyniku niektórych obliczeń macierzy. Natknąłem się na pewne problemy, które sprowadziłem do tego prostego przykładu, w którym próbuję ocenić wynik wykładniczej określonej macierzy i pomnożyć ją przez arbitralny wektor.sympy: "Transpose" obiekt nie ma atrybutu tolist
>>> import sympy
>>> v = sympy.MatrixSymbol('v', 2, 1)
>>> Z = sympy.zeros(2, 2) # create 2x2 zero matrix
>>> I = sympy.exp(Z) # exponentiate zero matrix to get identity matrix
>>> I * v
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "sympy/matrices/matrices.py", line 507, in __mul__
blst = B.T.tolist()
AttributeError: 'Transpose' object has no attribute 'tolist'
Natomiast gdybym bezpośrednio utworzyć macierz tożsamości, a następnie pomnożyć przez v, wówczas nie ma problemu:
>>> I_ = sympy.eye(2) # directly create the identity matrix
>>> I_ == I # check the two matrices are equal
True
>>> I_ * v
v
Jedno, co mam zwrócić uwagę jest to, że dwie macierze tożsamości są z różnych klas:
>>> I.__class__
sympy.matrices.immutable.ImmutableMatrix
>>> I_.__class__
sympy.matrices.dense.MutableDenseMatrix
ja również okazało się, że wywołanie metody as_mutable()
warunkiem obejście.
>>> I.as_mutable() * v
v
Czy zawsze konieczne, aby umieścić as_mutable()
połączeń przez całe obliczeń algebry liniowej? Zgaduję, że nie, i że te błędy sugerują, że używam złej strategii, aby rozwiązać mój problem, ale nie wiem, jaka byłaaby właściwa strategia. Czy ktoś ma jakieś wskazówki?
Przeczytałem stronę z dokumentacją na , ale nadal mogłem skorzystać z pomocy w zrozumieniu, jak ważne są różnice między nimi w porównaniu ze standardowymi macierzami zmiennymi, oraz dlaczego niektóre operacje (na przykład sympy.exp) konwertują te różne klasy.
FYI, błąd został naprawiony w głównej gałęzi programu sympy. – Phillip