Permutation of only x elements of a vector
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Josué Ortega
am 14 Sep. 2017
Kommentiert: Josué Ortega
am 14 Sep. 2017
Imagine a vector of natural numbers between 1 and 20, say
x=randperm(20)
I want to generate a vector identical to x, but changing the position of exactly 4 elements. How can I do this in general for a vector of m elements, when I want to change n elements?
2 Kommentare
Stephen23
am 14 Sep. 2017
"...changing the position of exactly 4 elements"
Do the positions have to change, or do you accept the possibility of the positions (randomly) being the same?
Akzeptierte Antwort
Guillaume
am 14 Sep. 2017
Doesn't your question just reduce to selecting 4 random integers from 1 to numel(x) using either randperm if the elements have to swap or randi if you accept the positions being the same (as per Stephen's question). You can then swap them in a fixed order or using randperm (which runs the risk of not doing any swapping)
x = 1:20;
swapidx = randperm(numel(x), 4); %or randi(n, 1, 4);
x(swapidx) = x(fliplr(swapidx)) %swap 1st index with fourth, 2nd with 3rd
x(swapidx) = x(swapidx(randperm(4))) %swap randomly (may not swap)
0 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!