Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Given a vector a=[1,2, 3.2, 4, 5] and an element x=3 In vector a, how to find the exact entry which is bigger than x?

Tags:

matlab

Given a vector a=[1,2, 3.2, 4, 5] and an element x=3 In vector a, how to find the exact entry which is bigger than x?

like image 565
user288609 Avatar asked Aug 29 '10 05:08

user288609


2 Answers

I'm not sure what you mean by "exact" entry. This will give you indices of all the values greater than x:

indices = find(a > x);

Assuming a is already sorted, this will give you the index of the first one (i.e. the smallest value greater than x):

index = find(a > x,1);
like image 105
gnovice Avatar answered Oct 20 '22 20:10

gnovice


If you want to compute these positions for multiple values of x, you will be better off using histc instead of looping through all values of x, as in terms of complexity histc will be O(n*log(n)), while the loop approach will be O(n^2):

[~,I] = histc(x, [-Inf; a(:); Inf]);
I(x==inf) = numel(a)+1;

This will work for sorted a and arbitrary x. As an example:

a = 1:10;
x = [5.5, 0.1, 2.3];

Will yield:

I = [6     1     3]
like image 42
knedlsepp Avatar answered Oct 20 '22 20:10

knedlsepp