How can I keep just the arrays with 2 is before 3 after random swap 2 numbers.
1 view (last 30 days)
Show older comments
with: s=[1,2,3,4,5];
2 Comments
Accepted Answer
Jan
on 17 Apr 2019
Edited: Jan
on 17 Apr 2019
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 Comments
Jan
on 19 Apr 2019
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.
More Answers (1)
Raj
on 17 Apr 2019
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!
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!