如果你有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