2017-06-18 48 views
2

如何在SymPy中使用其他基礎系統?我願做類似Rational(string)但不能在基地的東西10在SymPy中使用其他基礎系統

+0

I對SymPy知之甚少,但無論您用什麼基礎來表示它們,理性數字都是理性的。它只是解析你需要的另一個基礎,或者你確實需要結果是一個'Rational'對象嗎?你能舉一個你需要轉換的字符串的例子嗎? – Blckknght

+0

@Blckknght例如,我可能想要將字符串1.1轉換爲4/3,使用3作爲基礎。 – HyperNeutrino

+0

我對您的術語有點困惑。您的字符串「1.1」是否已經在第3位?那麼它將對應於基數10中的4/3,它等於基數3中的11/10。或者是基數爲10的字符串,並且您想要轉換爲基數3?基數10中的1.1是1.002200220022 ...基數3中是基數3中的102/101。 – Hannebambel

回答

1

你最需要的是可以在Python:

def sdigits(s, b, tuple=False): 
    p = len(s.split('.')[1]) 
    n, d = (int(s.replace('.', ''), base=b), b**p) 
    if tuple: 
     return n, d 
    return '%s/%s' % (n, d) 

這就產生了如下,

sdigits('1.1', 3) -> '4/3' 
sdigits('1.01', 3) -> '10/9' 
sdigits('-1.12', 3) -> '-14/9' 
sdigits('-1.12', 3, tuple=True) -> (-14, 9) 
sdigits('1.2', 4) -> '6/4' 

要受益於SymPy提供簡化比率的能力,您可以將任一輸出傳遞給Rational:

Rational(sdigits('1.2', 4)) -> 3/2 
Rational(*sdigits('1.2', 4, tuple=True)) -> 3/2 
相關問題