【发布时间】:2013-07-06 10:23:54
【问题描述】:
例如,当我计算98/42 时,我想得到7/3,而不是2.3333333,是否有使用Python 或Numpy 的函数?
【问题讨论】:
标签: python python-2.7 numpy numerical fractions
例如,当我计算98/42 时,我想得到7/3,而不是2.3333333,是否有使用Python 或Numpy 的函数?
【问题讨论】:
标签: python python-2.7 numpy numerical fractions
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)
【讨论】:
除了约翰的回答:
从十进制数中获取简化分数(比如 2.0372856077554062)
使用分数给出以下输出:
Fraction(2.0372856077554062)
#> Fraction(4587559351967261, 2251799813685248)
获得简化答案:
Fraction(2.0372856077554062).limit_denominator()
#> Fraction(2732, 1341)
【讨论】:
Fraction 有时也无法提供简单的答案(1.8 产生 8106479329266893/4503599627370496 而不是 9/5)。