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];

采纳的回答

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