Finding multiple of a decimal number in a floating point list

Dan Lenski dlenski at gmail.com
Mon Aug 18 20:04:53 CEST 2008


On Mon, 18 Aug 2008 10:52:45 -0700, Alejandro wrote:

> Hi:
> 
> I need to find the multiples of a decimal number in a floating point
> list. For instance, if a have the list [0,0.01,0.02,...1], I want the
> multiples of 0.2: [0, 0.2,0.4,0.6,0.8,1].
> 
> With integers this problem is easy, just test for (i%n == 0), where i is
> the number I am testing, and n is the multiple. Given the finite
> resolution of floating point numbers, this is more complicated for
> float.
> 
> I came with this solution:
> 
> from numpy import arange
> from math import modf, fabs
> 
> float_range = arange(0, 1, 0.01)
> for f in float_range:
>     m = modf(f / 0.2)[0]
>     if m<1e-13 or fabs(1-m)<1e-13:
>         print f
>         # Do something else
> 
> This code works, however, I found it a little ugly. Is there a better
> way to do the same?
> 
> Alejandro.

Hi Alejandro, you can do the same thing more efficiently (both in terms 
of lines of code and execution speed) by doing the whole array at once:

from numpy import arange, absolute
from math import modf, fabs

float_range = arange(0, 1, 0.01)
multiples = absolute(float_range % 0.2)<1e-13
# now multiples is a boolean array
print float_range[multiples]

HTH,
Dan



More information about the Python-list mailing list