Effacer les filtres
Effacer les filtres

Swap 3 random elements in an array

7 vues (au cours des 30 derniers jours)
Amine Ne
Amine Ne le 20 Août 2018
Commenté : Amine Ne le 20 Août 2018
How do I randomly swap three elements in an array? The element at selected position one will be moved to selected position two, the previous element at selected position two will be moved to position three, and the element at position three will be moved to selected position one.
For example: a=[4 2 3 1 5 7 6] would become anew=[4 2 6 1 3 7 5]
Thank you

Réponse acceptée

Steven Lord
Steven Lord le 20 Août 2018
Use randperm to select 3 elements (without replacement) from your vector.
a = [4 2 3 1 5 7 6]
ind = randperm(numel(a), 3)
a(ind) = a(ind([3 1 2]))
  1 commentaire
Amine Ne
Amine Ne le 20 Août 2018
Thank you Steven Lord, it works well

Connectez-vous pour commenter.

Plus de réponses (1)

KALYAN ACHARJYA
KALYAN ACHARJYA le 20 Août 2018
Modifié(e) : KALYAN ACHARJYA le 20 Août 2018
% I have tried this only swap two elements or even numbers, definite swap with each other is only possible in even numbers.
a=randperm(7)
idx=randperm(3);
a(idx)=a(fliplr(idx))
I have tried in another way, you can do that
a=randperm(7)
n=randi(5);
new_array=a(:,:);
new_array([n n+1 n+2])=a([n+2 n n+1])
  4 commentaires
KALYAN ACHARJYA
KALYAN ACHARJYA le 20 Août 2018
I have added (Edited answer) another way, pls try, if OK pls confirm it
Amine Ne
Amine Ne le 20 Août 2018
Modifié(e) : Amine Ne le 20 Août 2018
The second solution allows to swap between 3 consecutive elements.
For example: a=randperm(7)=[7 5 4 1 2 3 6];
n=randi(5)=4; new_array=a(:,:);
new_array([n n+1 n+2])=a([n+2 n n+1])=[7 5 4 3 1 2 6]
I think it is good for me, Thank you KALYAN ACHARJYA for your help and your time.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by