# Reversing a part of matrix

4 views (last 30 days)
Bartosz Bagrowski on 29 Apr 2022
Commented: Star Strider on 30 Apr 2022
Hey, I would like to choose two random values in a matrix and reverse from the first random number to the second one.
i=randsample(10,2)
i1=i(1);
i2=i(2);
let's say we got two random numbers - 3 and 7
M=[10 20 30 40 50 60 70 80 90 100];
I would like to get the matrix as following:
M_new=[10 20 70 60 50 40 30 80 90 100];
Could anyone help me to code it?
The method with the flip doesn't help much.

Star Strider on 29 Apr 2022
A few examples of a robust approach —
M=[10 20 30 40 50 60 70 80 90 100];
i=sort(randsample(10,2))
i = 2×1
5 6
M_new = [M(1:i(1)-1) flip(M(i(1):i(2))) M(i(2)+1:end)]
M_new = 1×10
10 20 30 40 60 50 70 80 90 100
i=sort(randsample(10,2))
i = 2×1
3 9
M_new = [M(1:i(1)-1) flip(M(i(1):i(2))) M(i(2)+1:end)]
M_new = 1×10
10 20 90 80 70 60 50 40 30 100
i=sort(randsample(10,2))
i = 2×1
1 9
M_new = [M(1:i(1)-1) flip(M(i(1):i(2))) M(i(2)+1:end)]
M_new = 1×10
90 80 70 60 50 40 30 20 10 100
i=sort(randsample(10,2))
i = 2×1
2 7
M_new = [M(1:i(1)-1) flip(M(i(1):i(2))) M(i(2)+1:end)]
M_new = 1×10
10 70 60 50 40 30 20 80 90 100
i=sort(randsample(10,2))
i = 2×1
8 9
M_new = [M(1:i(1)-1) flip(M(i(1):i(2))) M(i(2)+1:end)]
M_new = 1×10
10 20 30 40 50 60 70 90 80 100
.
##### 2 CommentsShowHide 1 older comment
Star Strider on 30 Apr 2022
My pleasure!
.

Voss on 29 Apr 2022
i=sort(randsample(10,2)) % sort so that i(2) >= i(1)
i = 2×1
3 7
i1=i(1);
i2=i(2);
M=[10 20 30 40 50 60 70 80 90 100];
M_new = M;
M_new(i1:i2) = M(i2:-1:i1)
M_new = 1×10
10 20 70 60 50 40 30 80 90 100

Riccardo Scorretti on 29 Apr 2022
A possible way is to pass through an vector of index (= ind in the code hereafter):
M=[10 20 30 40 50 60 70 80 90 100];
t = randsample(10, 2) % I reserve i for the imaginary unit
t = 2×1
8 10
ind = 1 : 10;
ind(t) = t([2 1]);
M = M(ind)
M = 1×10
10 20 30 40 50 60 70 100 90 80

Riccardo Scorretti on 29 Apr 2022
Another way (more efficient, I think) is to do a swp by hand:
M=[10 20 30 40 50 60 70 80 90 100];
t = randsample(10, 2) % I reserve i for the imaginary unit
t = 2×1
1 10
tmp_ = M(t(1)) ; M(t(1)) = M(t(2)) ; M(t(2)) = tmp_
M = 1×10
100 20 30 40 50 60 70 80 90 10
Voss on 29 Apr 2022
@Riccardo Scorretti Note that these answers swap the two elements at indices t, but the question asks to reverse the order of all elements between those indices.

### Categories

Find more on Logical in Help Center and File Exchange

R2021a

### Community Treasure Hunt

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

Start Hunting!

Translated by