Skip to content Skip to sidebar Skip to footer

Find Common Factor To Convert List Of Floats To List Of Integers

I have a list of floats which comes from some other function. What I know is that in ideal world there exist a common factor which can be used to multiply each term to obtain list

Solution 1:

Python's Fraction type can convert floating points to rationals with denominators under 1000000, and then you can find the lowest common denominator.

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

A straightforward way to find the least common multiple using the math.gcd function:

>>>denoms = [3,3,1,2]>>>functools.reduce(lambda a,b: a*b//math.gcd(a,b), denoms)
6

Solution 2:

The brute force solution. Still looking for something more universal...

deffind_int(arr):
    test = False
    epsilon = 1e-15
    maxint = 1000for i inrange(2, maxint, 1):
        for item in arr:
            ifabs(i*item-round(i*item)) < epsilon:
                test = Trueelse:
                test = Falsebreakif test:
            print i
            return [int(round(i*item)) for item in arr]
    print"Could not find one"return arr

Post a Comment for "Find Common Factor To Convert List Of Floats To List Of Integers"