2016-07-25 61 views
0

最近我使用布爾網絡,我使用sympy來操作布爾函數。我認爲這可能是非常基本的問題,但我找不到任何線索。在sympy中,如何將函數表達式轉換爲運算符重載表達式?

以下線路運行良好。

>>>from sympy import * 
>>>x,y = symbols("x y") 
>>>(x | y) & x 
And(Or(x, y), x) 

這裏我有一個很簡單的問題。 'And(Or(x,y),x)'如何表示爲'(x | y)& x'?

謝謝

回答

0

Sympy廣泛使用Python操作符重載功能。 在Python中,每個類都可以定義爲任何數學運算符將生效,通過定義具有特殊名稱的方法 - 這些方法總是以__作爲前綴和後綴,並且在Python Data Model中進行了描述。

Sympy符號和表達式是重新定義所有與運算符相關的方法以執行返回Sympy表達式對象而不是數字結果的操作的對象。

因此,bynary和&的dbinary或|運營商只是一個什麼Sympy做一部分,長英文版本提供AndOr函數調用,以及便於在某些情況下打字和可讀性。

+0

感謝您的詳細回覆。有沒有簡單的函數將字符串變量'And(Or(x,y),x)'轉換爲字符串變量'(x | y)&x'?如果解決方案不簡單,那麼你能否提供一些提示? –

0

如果你只是想更好的打印,可以運行

init_printing() 

,它將它使用Unicode字符,甚至LaTeX的,如果它是可用的(像Jupyter筆記本)

In [1]: (x | y) & x 
Out[1]: x ∧ (x ∨ y) 

打印你也可以使用pprint()函數來直接獲取它。

它看起來像默認SymPy打印機使用AndOr代替&|符號打印邏輯表達式,因此,如果要明確這些,你就需要繼承sympy.printing.str.StrPrinter和覆蓋_print_And_print_Or(見current implementation到了解這將如何工作)。

+0

我已經打開了一個問題來更改SymPy中的默認打印https://github.com/sympy/sympy/issues/11435 – asmeurer

+0

我發現它是針對我的問題的一個很好的解決方案。謝謝你的提示。 –