【问题标题】:Does Python have a function to reduce fractions?Python有减少分数的功能吗?
【发布时间】:2013-07-06 10:23:54
【问题描述】:

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

【问题讨论】:

    标签: python python-2.7 numpy numerical fractions


    【解决方案1】:

    fractions 模块可以做到这一点

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

    here 上有一个用于 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)
    

    【讨论】:

    • 谢谢!效果很好!输入值必须是整数,不能是浮点数。
    • @LWZ 您应该能够将浮点数用作其他分数
    【解决方案2】:

    除了约翰的回答:

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

    使用分数给出以下输出:

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

    获得简化答案

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

    【讨论】:

    • 谢谢,我现在默认使用这个:即使在简单的情况下,Fraction 有时也无法提供简单的答案(1.8 产生 8106479329266893/4503599627370496 而不是 9/5)。
    猜你喜欢
    • 1970-01-01
    • 2012-03-18
    • 2020-11-01
    • 2018-10-29
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    相关资源
    最近更新 更多