ad1*_*1v7 4 python floating-point
我有一个来自其他函数的浮点数列表。我所知道的是,在理想世界中,存在一个公因数,可用于将每一项相乘以获得整数列表。可能存在一些小的数值噪声(~1e-14)。
例如
[2.3333333333333335, 4.666666666666667, 1.0, 1.6666666666666667]
Run Code Online (Sandbox Code Playgroud)
这里每一项都可以乘以 3 以获得
[7.0, 14.0, 3.0, 5.0]
Run Code Online (Sandbox Code Playgroud)
我怎样才能找到这个词?我们可以假设存在整数解。
任何有帮助的评论将不胜感激
Python的Fraction类型可以将浮点数转换为分母在1000000以下的有理数,然后可以找到最小公分母。
>>> from fractions import Fraction
>>> a = [2.3333333333333335, 4.666666666666667, 1.0, 1.6666666666666667]
>>> [Fraction(x).limit_denominator() for x in a]
[Fraction(7, 3), Fraction(14, 3), Fraction(1, 1), Fraction(5, 3)]
Run Code Online (Sandbox Code Playgroud)
使用math.gcd函数查找最小公倍数的简单方法:
>>> denoms = [3,3,1,2]
>>> functools.reduce(lambda a,b: a*b//math.gcd(a,b), denoms)
6
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2021 次 |
| 最近记录: |