2011-06-08 58 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))) = []