2014-11-24 39 views
0

我試圖找到一個值或最相似值的項目在數組中找到值或最相似的價值的項目。例如,如果Item是3並且數組是[1,2,5,6,9],那麼最相似的值是2,因爲它具有最小的差異。我已經這樣做了,但我覺得有一種更有效的方法來做到這一點,因爲它有時會給值的錯誤..任何想法?陣列中的

我的代碼:

value = 3; 
array = [1 2 5 6 9]; 
cur = array - value; 
theneededvalue = min(cur); %error as it gets the -ve value and I need the smallest positive value 
+0

見http://stackoverflow.com/questions/8584902/get-nearest-number-out-of-array/8584940#8584940 - 你可能只需要使用一些描述的'abs'功能。 – paxdiablo 2014-11-24 04:49:31

+1

如果代碼給出了不正確的答案,那麼您不會尋找「更高效」的代碼,而是尋找正確的代碼。 – 2014-11-24 04:51:27

+0

沒有什麼比「錯誤的」次優的,我可以讓我的代碼,任意快,如果它不具備生產:-) – paxdiablo 2014-11-24 04:51:55

回答

2

你靠近。爲了避免負值出現問題,可以使用abs取絕對值。然後,您可以使用最小的第二輸出得到最接近的值:

value=3; 
array=[1,2,5,6,9]; 
cur = abs(array-value); 

% df is the minimum distance, ind is the index of the minimum distance 
[df,ind] = min(cur); 
theneededvalue = array(ind); 
1

MrAzzamans答案是完全正常的。只需提供一個選擇:你正在做的是插值到最近的值是什麼,因此你可以使用相應的功能,此interp1()與指定插值方法'nearest'

這可能不會比其他解決方案快,但它可能是對某些人的字「最近」時,更具有可讀性,因此我們知道的東西被映射到最接近的值。

這種方法要求你array排序。

value = 3; 
array = [1 2 5 6 9]; 
array = sort(array); %// only needed if array is not sorted already 

idx = interp1(array, 1:length(array), value, 'nearest'); %// interpolate to nearest index 
array(idx)