[SciPy-user] "Approximately equal to" operator?
Martin Spacek
scipy at mspacek.mm.st
Thu Jun 8 00:20:22 EDT 2006
Hello,
I'm comparing two numpy 1d arrays of the same length. One has ints, the
other floats. From what I can tell, using == isn't very reliable when
mixing ints and floats. Sometimes 1.0 == 1, and sometimes it doesn't.
For example:
[mspacek]|71> arange(10, 13)
<71> array([10, 11, 12])
[mspacek]|72> arange(10, 13, 0.1)[[0, 10, 20]]
<72> array([ 10., 11., 12.])
[mspacek]|73> arange(10, 13, 0.1)[[0, 10, 20]] == arange(10,13)
<73> array([True, False, False], dtype=bool)
In this case, 10 == 10.0, but 11 != 11.0 and 12 != 12.0
I guess comparing ints to floats is a touchy thing, and depends on the
system's C libraries. Maybe minuscule errors accumulate when building up
a float array using arange(). Anyways, rounding and then converting the
float array into an int array doesn't seem very Pythonic. I've noticed
there's a numpy function allclose(), but this doesn't return a boolean
array, just a single True if all the elements are equal.
Is there a "~=" or "approximately equal to" operator that does an
elementwise comparison of two arrays, and given a certain tolerance,
returns a boolean array?
Cheers,
Martin
More information about the SciPy-User
mailing list