# How do i get index of a closest value from an array?

4 views (last 30 days)
yashvin on 10 Jul 2015
Edited: Thorsten on 18 Jul 2015
Hello ,
My array is
a=[0 200 900 1000 1200 1798 1799 1801 2000 2700 3601]
I want to find all the index of numbers which are multiples of 900. In case the multiples are not present in the array, find the index of the closest number matching the multiples.
I want to find for multiples of 900
I tried this
Index= mod(a,900) == 0
index_chunk=find(Index == 1)
but it does not give me index of the closest number of multiples of 900.

Jan Orwat on 10 Jul 2015
Try something like this:
divisor = 900;
how_close_is = abs(mod(a+divisor/2,divisor)-divisor/2);
index_chunk=find(how_close == min(how_close));
index = abs(mod(a+divisor/2,divisor)-divisor/2) <= closer_than;
index_chunk = find(index);
yashvin on 13 Jul 2015
Edited: yashvin on 13 Jul 2015
@ Jan, if i change the closer_than=0, it picks
1 3 7 8 10 11
7 and 8 corresponds to 1799 and 1801. In fact, i want the index of any of the numbers- not both..Which approach would you suggest?

Thorsten on 10 Jul 2015
Edited: Thorsten on 10 Jul 2015
N = round(max(a)/900);
for i = 1:N, [~, ind(i)] = min(abs(a - 900*i)); end
Thorsten on 18 Jul 2015
Edited: Thorsten on 18 Jul 2015
To include 0, use
for i = 0:N, [~, ind(i+1)] = min(abs(a - 900*i)); end
To store the indices in a cell C, when all the a's a stored in cell A:
for j = numel(A) % loop through all a's
a = A{j};
for i = 0:N, [~, ind(i+1)] = min(abs(a - 900*i)); end
C{j} = ind;
end