2011-06-08 56 views
0

如果你有MATLAB陣列如下面的:MATLAB - 低頻去除元件以陣列

A = [1,1,1,1,2,2,2,2 ,3,3,3,4,4,5]

我希望能夠使得具有低頻率的元件被去除以過濾此陣列。

換句話說,有一種簡單的方法,以消除其具有例如<一定低頻數組中的元素比= 2?

在這種情況下:

其結果將是:

[1,1,1,1,2,2,2,2,3,3,3]

乾杯

+0

是數組排序? – jonsca 2011-06-08 11:52:25

+0

它可以。如果它更容易 – kkudi 2011-06-08 11:53:07

+0

因此,沿着數組遍歷,檢查下一個元素是否與前一個元素相同。保持計數並移除許多元素。您可以使用數組長度的變化值來控制何時用完數字。 – jonsca 2011-06-08 11:55:40

回答

3

我可能會做它在某種程度上是這樣的(希望語法是不錯:))

function array= ClearElementsWithLowOccurence(array,minimalFrequency) 
elements = unique(array); 
indecesToRemove = []; 
for i = 0:length(elements) 
    indeces = find(array==elements(i)); 
    if (length(indeces) < minimalFrequency) 
     indecesToRemove = [indecesToRemove indeces]; 
    end; 
end; 
array(indecesToRemove) = []; 
-1

考慮到您發佈的問題不屬於單個域,但幾乎可以在任何地方遇到,我將使用僞代碼。我希望這不是太多的問題/刺激。

這裏是你可以做什麼

  1. 採取變量

    • LIMIT:(在這種情況下,2)生存
    • 元件所需的元素的最低頻率的值本數組元素
  2. 現在,換每個(新)ELEMENT遇到,請執行下列操作:

    • 檢查元素限制ahead元素
    • 如果它等於元,這個值將被保留,並繼續以同樣的方式來 的下一個值(現在是ELEMENT),直到數組完全遍歷。
    • 如果不是,刪除此值。所有的事件,並再次繼續.....

    最後,你最終所需要的陣列。

3

這是一個快速的方法。 A不需要排序,數字可以是任何東西。

A = [1,1,1,1,2,2,2,2,3,3,3,4,4,5]; 

%# count the numbers in A (use unique so that the array 
%# remains at a decent size even if the values are very different) 
[uniqueEntries,~,idx] = unique(A); 
counts = histc(idx,1:max(idx)); 

%# remove all the numbers whose count is less or equal than two 
A(ismember(A,uniqueEntries(counts<=2))) = []