From: Nadav H. <na...@vi...> - 2004-06-01 13:31:54
|
I am currently working on a simulation that makes a heavy use of searchsorted. But it does not precisely fit to what I need --- if a value v is between p and q searchsorted returns the index of q, while what I need is the index of p. Currently my solution is to turn to floating points numbers: ====================================== Python 2.3.4 (#1, May 31 2004, 09:13:03) [GCC 3.4.0] on linux2 Type "help", "copyright", "credits" or "license" for more information. from numarray import * bins = array((0,10,20,30)) val = array((10, 15)) searchsorted(bins, val) array([1, 2]) # I really would like to get array([1, 1]) # Here is the trick: fb = bins - 0.1 fb array([ -0.1, 9.9, 19.9, 29.9]) searchsorted(fb, val) - 1 array([1, 1]) # That's it! ============================================ My questions are: 1. Is there a more elegant solution? 2. I am thinking of letting "searchsorted" return a second boolean array which has the value True for every exact match: >>> searchsorted(bins, val) >>> [array([1, 2]), array([1, 0], type=Bool)] Any comments? Nadav. |