Permutation of only x elements of a vector

1 回表示 (過去 30 日間)
Josué Ortega
Josué Ortega 2017 年 9 月 14 日
コメント済み: Josué Ortega 2017 年 9 月 14 日
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
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?
Josué Ortega
Josué Ortega 2017 年 9 月 14 日
I accept that they can remain the same.

サインインしてコメントする。

採用された回答

Guillaume
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 件)

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by