Python有减少分数的功能吗?

时间:2013-07-08 23:28:24

标签: python python-2.7 numpy numerical fractions

例如,当我计算98/42时,我想获得7/3,而不是2.3333333,是否有使用Python或Numpy的函数?

2 个答案:

答案 0 :(得分:24)

fractions模块可以做到

>>> from fractions import Fraction
>>> Fraction(98, 42)
Fraction(7, 3)

对于一个numpy gcd,有here的配方。然后你可以用它来划分你的分数

>>> def numpy_gcd(a, b):
...     a, b = np.broadcast_arrays(a, b)
...     a = a.copy()
...     b = b.copy()
...     pos = np.nonzero(b)[0]
...     while len(pos) > 0:
...         b2 = b[pos]
...         a[pos], b[pos] = b2, a[pos] % b2
...         pos = pos[b[pos]!=0]
...     return a
... 
>>> numpy_gcd(np.array([98]), np.array([42]))
array([14])
>>> 98/14, 42/14
(7, 3)

答案 1 :(得分:2)

除了约翰的回答:

从十进制数中得到简化分数(比如 2.0372856077554062)

使用 Fraction 得到以下输出:

Fraction(2.0372856077554062)
#> Fraction(4587559351967261, 2251799813685248)

获得简化答案

Fraction(2.0372856077554062).limit_denominator()
#> Fraction(2732, 1341)