Python有减少分数的功能吗?

Python有减少分数的功能吗?,python,python-2.7,numpy,numerical,fractions,Python,Python 2.7,Numpy,Numerical,Fractions,例如,当我计算98/42时,我想得到7/3,而不是2.3333333,是否有一个使用Python或Numpy的函数?模块可以做到这一点 >>> from fractions import Fraction >>> Fraction(98, 42) Fraction(7, 3) 这里有一个关于numpy gcd的配方。你可以用它来除以你的分数 >>> def numpy_gcd(a, b): ... a, b = np.broadca

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

模块可以做到这一点

>>> from fractions import Fraction
>>> Fraction(98, 42)
Fraction(7, 3)
这里有一个关于numpy gcd的配方。你可以用它来除以你的分数

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

除了约翰的回答之外:

从十进制数(比如2.0372856077554062)中获取简化分数

使用分数可以得到以下输出:

Fraction(2.0372856077554062)
#> Fraction(4587559351967261, 2251799813685248)
要获得简化答案

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

谢谢很好!输入值必须是整数,不能是浮点数。@LWZ您应该可以将浮点数用作其他分数。默认情况下,我现在使用浮点数:即使在简单的情况下,
分数
有时也无法提供简单的答案(1.8产生8106479329266893/4503599627370496,而不是9/5)。