필터 지우기
필터 지우기

Swap 3 random elements in an array

조회 수: 5 (최근 30일)
Amine Ne
Amine Ne 2018년 8월 20일
댓글: Amine Ne 2018년 8월 20일
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

채택된 답변

Steven Lord
Steven Lord 2018년 8월 20일
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
Amine Ne
Amine Ne 2018년 8월 20일
Thank you Steven Lord, it works well

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

KALYAN ACHARJYA
KALYAN ACHARJYA 2018년 8월 20일
편집: KALYAN ACHARJYA 2018년 8월 20일
% 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
KALYAN ACHARJYA
KALYAN ACHARJYA 2018년 8월 20일
I have added (Edited answer) another way, pls try, if OK pls confirm it
Amine Ne
Amine Ne 2018년 8월 20일
편집: Amine Ne 2018년 8월 20일
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.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by