MATLAB: Permutation of only x elements of a vector

MATLABrandomrandom number generatorvector

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?

Best Answer

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)