Created
June 7, 2012 21:49
-
-
Save jiffyclub/2891755 to your computer and use it in GitHub Desktop.
Test whether a value is within some range with some fuzziness at the edges to allow for floating point noise.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import numpy as np | |
def fuzzy_between(val, minval, maxval, fuzz=2, inclusive=True): | |
""" | |
Test whether a value is within some range with some fuzziness at the edges | |
to allow for floating point noise. | |
The fuzziness is implemented by expanding the range at each end `fuzz` steps | |
using the numpy.nextafter function. For example, with the inputs | |
minval = 1, maxval = 2, and fuzz = 2; the range would be expanded to | |
minval = 0.99999999999999978 and maxval = 2.0000000000000009 before doing | |
comparisons. | |
Parameters | |
---------- | |
val : float | |
Value being tested. | |
minval : float | |
Lower bound of range. Must be lower than `maxval`. | |
maxval : float | |
Upper bound of range. Must be higher than `minval`. | |
fuzz : int, optional | |
Number of times to expand bounds using numpy.nextafter. | |
inclusive : bool, optional | |
Set whether endpoints are within the range. | |
Returns | |
------- | |
is_between : bool | |
True if `val` is between `minval` and `maxval`, False otherwise. | |
""" | |
# expand bounds | |
for _ in xrange(fuzz): | |
minval = np.nextafter(minval, minval - 1e6) | |
maxval = np.nextafter(maxval, maxval + 1e6) | |
if inclusive: | |
return minval <= val <= maxval | |
else: | |
return minval < val < maxval |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment