2014-07-15 48 views
0

我正在試圖創建一個數組Z,它的索引是數組X中最常出現的兩個元素之間的差異。因此,如果最頻繁發生在X的兩個元件之間的差爲3,那麼我會得到所有在X具有該差成陣列Z.如何收集元素之間具有相同長度的數組X的索引

x = [ 0.2 0.4 0.6 0.4 0.1 0.2 0.2 0.3 0.4 0.3 0.6]; 
ct = 0; 
difference_x = diff(x); 
unique_x = unique(difference_x); 
for i = 1:length(unique_x) 
    for j = 1:length(x) 
      space_between_elements = abs(x(i)-x(i+1)); 
      if space_between_elements == difference_x 
       ct = ct + 1; 
       space_set(i,ct) = j; 
      end 
    end 
end 

我不得到X的含有來自該代碼最頻繁的差的索引的索引。

+2

也請鍵入了所需的解決方案 - 你描述不清楚。您發佈的嵌套循環發佈了正確答案嗎?無論哪種方式,你的代碼有什麼問題。 – Dan

回答

0

看樣子你想找到多少獨特的差異性有,用「差異化」在absoulte價值感解釋;並且還發現每個差異發生多少次

你能做到這一點,如下所示:

x = [ 0.2 0.4 0.6 0.4 0.1 0.2 0.2 0.3 0.4 0.3 0.6]; %// data 
difference_x = abs(diff(x)); 
unique_x = unique(difference_x); %// all differences 
counts = histc(difference_x, unique_x); %// count for each difference 

然而,對於唯一(或等於)比較實數爲problematic,因爲有限的精度。你還是應用公差申報兩個值是「平等」:

x = [ 0.2 0.4 0.6 0.4 0.1 0.2 0.2 0.3 0.4 0.3 0.6]; %// data 
tol = 1e-6; %// tolerance 
difference_x = abs(diff(x)); 
difference_x = round(difference_x/tol)*tol; %// apply tolerance 
unique_x = unique(difference_x); %// all differences 
counts = histc(difference_x, unique_x); %// count for each difference 

你的榜樣x,第二種方法給出

>> unique_x 
unique_x = 
     0 0.1000 0.2000 0.3000 
>> counts 
counts = 
    1  4  3  2 
+0

我將如何使用最高的unique_x計數來收集數組X的索引。類似於 index = find(counts == max(counts)); if unique_x(index)== difference_X %收集X中的索引號 end – user3840315

相關問題