Reducing repeated elements in an array by a factor

1 vue (au cours des 30 derniers jours)
Thomas Gvero
Thomas Gvero le 12 Fév 2020
Réponse apportée : Matt J le 12 Fév 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 commentaires
Matt J
Matt J le 12 Fév 2020
Modifié(e) : Matt J le 12 Fév 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 le 12 Fév 2020
As far as I'm aware, in the context i am using it, yes.

Connectez-vous pour commenter.

Réponse acceptée

Stephen23
Stephen23 le 12 Fév 2020
Modifié(e) : Stephen23 le 12 Fév 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

Plus de réponses (1)

Matt J
Matt J le 12 Fév 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

Catégories

En savoir plus sur Data Type Conversion dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by