问题:
我想以最简单的形式将浮点数转换为整数的比率。(不是这个问题的重复,请参阅下面的“编辑”)。例如,0.1
= 1, 10
,0.66666...
=2, 3
等。在下面的代码片段中,我尝试这样做以x = 0.1, 0.2, ..., 1.0
使用此默认函数;该方法仅适用于x = 0.5
和x = 1.0
。为什么这个算法对于其他值会失败,有x
什么更好的方法来做到这一点?如果它是相关的,我的用例将是dx ~ 0.0005 = x[1] - x[0]
for 0.0005 < x 10.0
。
代码:
import numpy as np
f = np.vectorize(lambda x : x.as_integer_ratio())
x = np.arange(0.1, 1.1, 0.1)
nums, dens = f(x)
for xi, numerator, denominator in zip(x, nums, dens):
print("\n .. {} = {} / {}\n".format(xi, numerator, denominator))
输出:
.. 0.1 = 3602879701896397 / 36028797018963968
.. 0.2 = 3602879701896397 / 18014398509481984
.. 0.30000000000000004 = 1351079888211149 / 4503599627370496
.. 0.4 = 3602879701896397 / 9007199254740992
.. 0.5 = 1 / 2
.. 0.6 = 5404319552844595 / 9007199254740992
.. 0.7000000000000001 = 6305039478318695 / 9007199254740992
.. 0.8 = 3602879701896397 / 4503599627370496
.. 0.9 = 8106479329266893 / 9007199254740992
.. 1.0 = 1 / 1
编辑:
这不是真正的重复。原始问题中接受的答案的两种方法都失败了我的 MWE 的一个基本用例。要显示该Fraction
模块给出了相同的错误:
import numpy as np
from fractions import Fraction
f = np.vectorize(lambda x : Fraction(x))
x = np.arange(0.1, 1.1, 0.1)
y = f(x)
print(y)
## OUTPUT
[Fraction(3602879701896397, 36028797018963968)
Fraction(3602879701896397, 18014398509481984)
Fraction(1351079888211149, 4503599627370496)
Fraction(3602879701896397, 9007199254740992) Fraction(1, 2)
Fraction(5404319552844595, 9007199254740992)
Fraction(6305039478318695, 9007199254740992)
Fraction(3602879701896397, 4503599627370496)
Fraction(8106479329266893, 9007199254740992) Fraction(1, 1)]