I have an array with x amount of values. How can I find the index value of the element that is closest or equal to a certain value?
I tried it in the following manner, but it doesn't work when the value of the element in Temp is equal to the RefTemp value.
Temp = [-15.3, 0.2, 15.2, 30, 45.3]; RefTemp = 30; %Value to compare the Temp array values to
for ii = 1:length(Temp) TempCalc(ii) = abs(Temp(ii) - RefTemp); end
Thank you very much for your help!
Do you have the Stats toolbox? if you do then do a nearest neighbor search as follows:
location = knnsearch(Temp',30);
If you don't have stats toolbox then use delauny to do nn search:
>> tri = delaunayn(Temp'); >> dsearchn(Temp',tri,30)
You have several options. The first question is: do you really need the index, or could you use a vector of logicals, e.g. for indexing something else. Look at the following; we want to extract all volumes associated with temperatures that are closest to a ref value:
>> temp = [-15.3, 0.2, 15.2, 30, 45.3]; >> volume = [4, 7, 28, 35, 20] ; >> ref = 27.2 ; >> dif = abs(temp-ref) dif = 42.5000 27.0000 12.0000 2.8000 18.1000 >> min(dif) ans = 2.8000 >> match = dif == min(dif) match = 0 0 0 1 0 % Vector of logicals indicate % where dif equals its min. >> idx = find(dif == min(dif)) idx = 4 % Index of element that % the min matches
Now you can extract the corresponding volume with either the vector of logicals (which avoids using find()) or the index.
>> volume(match) ans = 35 >> volume(idx) ans = 35
This is one "vector" way to achieve what you want; without all the extra steps, this reduces to:
>> dif = abs(temp-ref) ; >> volume(dif == min(dif)) ans = 35