Reducing repeated elements in an array by a factor

3 Ansichten (letzte 30 Tage)
Thomas Gvero
Thomas Gvero am 12 Feb. 2020
Beantwortet: Matt J am 12 Feb. 2020
Is there a way to reduce the number of repeated elements in an array by a factor? For example, say the factor I had was 3, i would want to reduce
[1 2 2 2 2 2 2 5 6]
to
[1 2 2 5 6]
i.e. only leave one third of the repeated elements.
Not sure if this is possible but worth a shot, thanks! :)
  4 Kommentare
Matt J
Matt J am 12 Feb. 2020
Bearbeitet: Matt J am 12 Feb. 2020
Do the repeated elements always occur in fixed, known multiples? How would, a reduction by 3 handle this,
[1 1 1 5 2 2 2 2 6]
Thomas Gvero
Thomas Gvero am 12 Feb. 2020
As far as I'm aware, in the context i am using it, yes.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Stephen23
Stephen23 am 12 Feb. 2020
Bearbeitet: Stephen23 am 12 Feb. 2020
>> V = [1,2,2,2,2,2,2,5,6];
>> N = 3;
>> X = cumsum([1,diff(V)~=0]);
>> F = @(v) {v(1:ceil(numel(v)/N))};
>> cell2mat(accumarray(X(:),V(:),[],F))
ans =
1
2
2
5
6

Weitere Antworten (1)

Matt J
Matt J am 12 Feb. 2020
Another method, one which avoids for-loops inherent in cell2mat,
V=[1,2,2,2,0,2,2,2,5,5,5,5,5,5,6,6,6];
N=3;
X = cumsum([1,diff(V)~=0]);
[~,idx]=unique([X,inf],'stable');
result=V( repelem(idx(1:end-1), ceil(diff(idx)/N) ) )
result =
1 2 0 2 5 5 6

Kategorien

Mehr zu Data Type Conversion finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by