Try to mix as much as possible elements inside an array
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Given a vector
V = [1 1 1 1 1 1 1 4 4 4 4 4 1 1 1 1 1 4 4 4 4 4 4 5 5 5 5 5 5 8 8 8 8 8 8 5 5 5 5 5 5 5 5 6 6 6 6 6 6 8 8 8 8 5 5 5 5 6 6 7 7 7 7 7 9 9 9 9 9 7 7 7]
I would like to destroy the consecutivity of the same number and mix the elements. In particular I want to mix 1 just with 4, 5 just with 6-8 and 7 just with 9.
obtaining for example:
S = [1 1 4 1 4 1 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 4 5 5 8 5 8 5 8 5 8 5 8 6 5 5 6 5 5 5 8 5 6 8 6 5 6 5 8 6 5 8 5 6 5 5 8 6 7 9 7 7 7 9 7 9 7 9 7 9 7]
It's not important the way I mix but it's important the consecutivity: first 1-4 then 5-8-6 and finally 7-9
May someone help me to find a way to obtain S?
3 commentaires
Réponse acceptée
Adam Danz
le 18 Sep 2019
The 'exchangeOpts' is a list of exchange options such that any value in V that matches a value in exchangeOpts{n} can be replaced with a random value from exchangeOpts{n}.
V = [1 1 1 1 1 1 1 4 4 4 4 4 1 1 1 1 1 4 4 4 4 4 4 5 5 5 5 5 5 8 8 8 8 8 8 5 5 5 5 5 5 5 5 6 6 6 6 6 6 8 8 8 8 5 5 5 5 6 6 7 7 7 7 7 9 9 9 9 9 7 7 7];
exchangeOpts = {[1,4],[5,6],[7,9]}; %identify exchange groups (in cell array to allow for mixed vector sizes)
% loop through each exchange option
S = V;
for i = 1:numel(exchangeOpts)
idx = ismember(V,exchangeOpts{i}); %identifies which elements will be randomized
S(idx) = exchangeOpts{i}(randi(numel(exchangeOpts{i}),1,sum(idx)));
end
0 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Creating and Concatenating Matrices 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!