How can I keep just the arrays with 2 is before 3 after random swap 2 numbers.

조회 수: 1 (최근 30일)
with: s=[1,2,3,4,5];
  댓글 수: 2
madhan ravi
madhan ravi 2019년 4월 17일
Show how your output should look like.
Hang Vu
Hang Vu 2019년 4월 17일
Thanks for response! the output should be s=[1,4,2,3,5] or [2,4,1,5,3] for example. just to make sure 2 before 3

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

채택된 답변

Jan
Jan 2019년 4월 17일
편집: Jan 2019년 4월 17일
s = [1,2,3,4,5];
s = s(randperm(numel(s))); % Random permutation?
% Or swap 2 elements:
index = randperm(numel(s), 2);
s(index) = s(flip(index));
s(s == 2 | s == 3) = [2, 3]; % Re-order the elements 2 and 3
  댓글 수: 4
Hang Vu
Hang Vu 2019년 4월 18일
Thank you for the re order idea! I applied for this:
s=[1,2,3,4,5];
L=size(s,2);
a=randi([1 L-1],1);
b=randi([1 L-1],1);
temp=s(a);
s(a)=s(b);
s(b)=temp
for i=1:5
ind1=find(s(:,:)==2);
ind2=find(s(:,:)==3);
end
if ind1>ind2
s(s == 2 | s == 3) = [2, 3];
s
else
s
end
Jan
Jan 2019년 4월 19일
This is not useful:
for i=1:5
ind1=find(s(:,:)==2);
ind2=find(s(:,:)==3);
end
The body of the loop is calculated 5 times with identical values. You can omit the loop:
ind1=find(s(:,:)==2);
ind2=find(s(:,:)==3);
But you can omit this test completely. This is sufficient for all cases:
s(s == 2 | s == 3) = [2, 3];
Why do you use L-1 in randi([1 L-1],1) ? I assume you want L instead.

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

추가 답변 (1개)

Raj
Raj 2019년 4월 17일
Try this:
s=[1,2,3,4,5]
%First random swap
x=randi([1,4],1,1);
if s(x)~=2
s([x x+1])= s([x+1 x]);
else
s([x x-1])=s([x-1 x]);
end
disp('After first random swap s=')
disp(s);
%second random swap
y=randi([1,4],1,1);
if s(y)~=2
s([y y+1])= s([y+1 y]);
else
%Do nothing
end
disp('After second random swap s=')
disp(s);
There may be better and optimized way of doing this also but this also works!

카테고리

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