2017-06-18 3 views
2

SymPyで別のベースシステムを使用するにはどうすればよいですか?私はRational(string)に似ていないベースで何かをしたいと思います10SymPyの他のベースシステムの使用

+0

I SymPyについて詳しくは分かりませんが、合理的な数字は、あなたがそれらを表現するために使っているベースに関係なく合理的です。あなたが必要とする他の基盤を解析するだけなのでしょうか、あるいは結果が 'Rational'オブジェクトであることは間違いありませんか?変換する必要のある文字列の例を挙げることができますか? – Blckknght

+0

@Blckknghtたとえば、文字列1.1を基底3を使用して4/3に変換するとよいでしょう。 – HyperNeutrino

+0

用語について少し混乱します。あなたの文字列 "1.1"はすでにベース3にありますか?次に、基数10の4/3に相当し、基数3の11/10に相当します。または、基数10の文字列が基数3に変換したいですか?ベース10の1.1はベース3の1.002200220022 ...ベース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