如果你有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]
干杯
如果你有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]
干杯
我可能会做它在某种程度上是这样的(希望语法是不错:))
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) = [];
考虑到您发布的问题不属于单个域,但几乎可以在任何地方遇到,我将使用伪代码。我希望这不是太多的问题/刺激。
这里是你可以做什么
采取变量
现在,换每个(新)ELEMENT遇到,请执行下列操作:
最后,你最终所需要的阵列。
这是一个快速的方法。 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))) = []
是数组排序? – jonsca 2011-06-08 11:52:25
它可以。如果它更容易 – kkudi 2011-06-08 11:53:07
因此,沿着数组遍历,检查下一个元素是否与前一个元素相同。保持计数并移除许多元素。您可以使用数组长度的变化值来控制何时用完数字。 – jonsca 2011-06-08 11:55:40