pythonpython-2.7numpynumericalfractions

Does Python have a function to reduce fractions?


For example, when I calculate 98/42 I want to get 7/3, not 2.3333333, is there a function for that using Python or Numpy?


Solution

  • The fractions module can do that

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

    There's a recipe over here for a numpy gcd. Which you could then use to divide your fraction

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