Permutation of only x elements of a vector
1 回表示 (過去 30 日間)
古いコメントを表示
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 件のコメント
Stephen23
2017 年 9 月 14 日
"...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?
採用された回答
Guillaume
2017 年 9 月 14 日
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 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Creating and Concatenating Matrices についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!