如何使用sympy操作矩阵中的表达式?

2024-10-03 04:33:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个库,我可以用库中的对象构造表达式。例如,x和{}是我库中的实例,我可以构造如下表达式:

# below is a simplified version of my class 
class MySymbol(object):
    import random
    _random_value = random.randint(1,4)

    def __init__(self, value):
        self.value = value

    def __add__(self, symbol):
        return MySymbol(self.value + symbol.value)

    def __mul__(self, symbol):
        return MySymbol(self.value * symbol.value)

    def __repr__(self):
        return str(self.value)

    def _get_random_value(self):
        return self._random_value

x,y = sympy.symbols('x y')


x = MySymbol(9)
y = MySymbol(3)

import sympy
A = sympy.Matrix([[x,y],[x,y]])
B = sympy.Matrix([[x+y,x*y]])

矩阵运算也是如此。当我希望这些元素保持其类型MySymbol时,sympy.Matrix类将这些元素转换为sympy.core.numbers.Integer

^{pr2}$

现在,因为BA[0,0]不再是MySymbol类型,我无法调用我想要的方法:

BA[0,0]._get_random_value()  # DOES NOT WORK 
>> AttributeError: 'Integer' object has no attribute '_get_random_value'


expression = x*x+y*x+x*x*y
expression._get_random_value()   # THIS DOES WORK
>> 4

如何利用来自sympy.Matrix的矩阵乘法,但仍然允许矩阵的元素保留其类类型{}?并且仍然允许他们的所有方法(例如_get_random_value())都可以访问?在


Tags: importself类型getreturnobjectvalue表达式