2017-02-06 9 views
7

Bir kütüphane yazıyorum ve kütüphaneden nesneleri kullanarak ifadeler yapıyorum. Örneğin, x ve y benim kütüphaneden örnekleri vardır ve ben gibi ifadeleri oluşturabilirsiniz:Semptomları kullanarak ifadelerdeki ifadeleri nasıl işlersiniz?

# 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]]) 

Bu aynı zamanda matris işlemleri için de geçerlidir. BA[0,0] artık değil tip MySymbol ait olduğu için ben üzerinde istediğiniz yöntemleri diyemezsin, Şimdi

BA=B*A 
print type(BA[0,0]) 
print type(x*x+y*x+x*x*y) # first element of matrix in *symbolic* form 

<class 'sympy.core.numbers.Integer'> 
<class '__main__.MySymbol'> 

:

sympy.Matrix sınıf onun kendi türünü MySymbol korumak istediğinizde, sympy.core.numbers.Integer için bu öğeleri dönüştürür
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'dan matris çarpımından nasıl yararlanabilirim, ancak yine de matris öğelerinin sınıf türlerini MySymbol koruyabilmesine izin veririm? ve hala tüm yöntemlerine (_get_random_value() gibi) erişilebilsin mi?

+0

. umarım, daha net hale getirmeye yardımcı olur – Sother

+0

MySemini sympy.core.numbers.Integer'den mi devralmak mümkün müdür? –

+0

Bu çözümü hayal ederken sorun yaşıyorum. Ne düşündüğünü yayınlayabilir misin? Ya da "MySymbol" semiri mi, "Miatrix" mi? – Sother

cevap

3

SymPy içinde kullanmak için bir SymPy sınıfından alt sınıfa ihtiyacınız vardır. Sınıfınızın yaptıklarına bağlı olarak, hangi sınıfı alt sınıfa ayıracağınızı söyleyeceksiniz, ancak en tipik üst sınıf, Expr. Benim çok benzer bir soruya cevabımı gör here. Soruyu biraz temizledikten sonra

+0

Vay, bu soruların zamanlaması iyidir. Bir göz atacağım teşekkürler. – Sother

+0

evet, bu, yukarıdaki soru hakkındaki yorumumda söylediğim şey ^^. Bu uygulamayı uygulayacağınızdan emin değilsiniz .... – Sother

+0

Bunun için bir alt sınıfın nasıl kullanıldığına dair bir örnek verebilir misiniz? @asmeurer – Sother

İlgili konular