Hi This questions might seem stupid, but I didn't get a clever solution myself, or found one in the archives, the cookbook, etc. . If I overlooked something, please give a pointer. Well, if I have an 1D array like [ 0. , 0.1, 0.2, 0.3, 0.4, 0.5] ,a scalar like 0.122 and want to retrieve the index postion of the closest value of the scalar in the array: Is there any fast method to get this? Right now I've implemented the following method: def _get_value_index(value, a): mindiff = 1e20 index = 0 for intensity, temp_index in zip(a, xrange(a.shape[0])): diff = abs(intensity - value) #closer to given value? if diff <= mindiff: mindiff = diff index = temp_index return index It works, but is akward and takes too much time (I've no benchmark), if the array is long and the method called often within a different function. But it should help clarify the problem. TIA Christian
Christian Meesters wrote:
Hi
This questions might seem stupid, but I didn't get a clever solution myself, or found one in the archives, the cookbook, etc. . If I overlooked something, please give a pointer.
Well, if I have an 1D array like [ 0. , 0.1, 0.2, 0.3, 0.4, 0.5] ,a scalar like 0.122 and want to retrieve the index postion of the closest value of the scalar in the array: Is there any fast method to get this?
Try searchsorted. r.
Try searchsorted. Thanks, but that doesn't work. Sorry, if my question wasn't clear.
To illustrate the requirement: For instance:
a array([ 0. , 0.1, 0.2, 0.3, 0.4]) # should be 1 ... a.searchsorted(0.11) 2 # should be 2 ... a.searchsorted(0.16) 2
I could correct for one index position, of course, but I still have the requirement to get the index of the item with the closest value to the key. Since searchsorted returns the index of the first item in a that is >= or > the key, it can't make the distinction between 0.1 and 0.2 as I would like to have. Hope this clarifies my question. Christian
Christian Meesters wrote:
Try searchsorted. Thanks, but that doesn't work. Sorry, if my question wasn't clear.
To illustrate the requirement: For instance:
a array([ 0. , 0.1, 0.2, 0.3, 0.4]) # should be 1 ... a.searchsorted(0.11) 2 # should be 2 ... a.searchsorted(0.16) 2
I could correct for one index position, of course, but I still have the requirement to get the index of the item with the closest value to the key. Since searchsorted returns the index of the first item in a that is >= or > the key, it can't make the distinction between 0.1 and 0.2 as I would like to have.
I see. But it gives you the index (say 'ii') of the first item that is grater than your scalar - then you just have to compare your scalar with a[ii] and a[ii-1] and choose whichever is closer, no? r.
On Wed, Feb 07, 2007 at 02:00:52PM +0100, Christian Meesters wrote:
This questions might seem stupid, but I didn't get a clever solution myself, or found one in the archives, the cookbook, etc. . If I overlooked something, please give a pointer.
Well, if I have an 1D array like [ 0. , 0.1, 0.2, 0.3, 0.4, 0.5] ,a scalar like 0.122 and want to retrieve the index postion of the closest value of the scalar in the array: Is there any fast method to get this?
If I understand correctly: data = N.array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5]) diff = N.abs(data - val) print N.argmin(diff) Regards Stéfan
participants (4)
-
Christian
-
Christian Meesters
-
Robert Cimrman
-
Stefan van der Walt