У Python есть функция уменьшения фракций? - программирование
Подтвердить что ты не робот

У Python есть функция уменьшения фракций?

Например, когда я вычисляю 98/42, я хочу получить 7/3, а не 2.3333333, есть ли функция, использующая Python или Numpy?

4b9b3361

Ответ 1

Модуль fractions может сделать это

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