# Rearrange any matrix Randomly with a specific sequence

3 views (last 30 days)
Mahmoud Khadijeh on 22 Jun 2019
Commented: Mahmoud Khadijeh on 22 Jun 2019
Hello,
I have a Matrix A like this
A=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]'
I want to redistribute the matrix but I want to preserve a specifc sequence which is 5 here.
I mean I need a way to redistribute each five element randomly and assign them to a new matrix
for example:
the matrix B will be like this:
B=[6 7 8 9 10 11 12 13 14 15]'
the matrix C will be like this:
C=[ 1 2 3 4 5 16 17 18 19 20]'
Is that possible in MATLAB ?
Thanks,

Show 1 older comment
Mahmoud Khadijeh on 22 Jun 2019
yes I know this function but I want the randomness to be in a specific sequence as I mentioned in my question.
Thanks
KALYAN ACHARJYA on 22 Jun 2019
It seems simple, it would be better to answer if you clearly elaborate the question?
For the following inputs
A=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]'
Apart from above B and C, what are other possible outputs?
Mahmoud Khadijeh on 22 Jun 2019
I just want to rearrange each five element in the matrix A randomly for example ,
If I run the code, I want the matrix A to be like this:
A=[16 17 18 19 20 1 2 3 4 5 11 12 13 14 15 6 7 8 9 10 ]'
if I run the code again, I want the matrix to be like this:
A=[1 2 3 4 5 16 17 18 19 20 6 7 8 9 10 11 12 13 14 15 ]'
regards,

infinity on 22 Jun 2019
Here is an example that you can refer
a = 1:20;
b = randperm(4);
n = length(b);
for i = 1:n
c(5*(i-1)+1:5*i) = a(5*(b(i)-1)+1:5*b(i));
end

#### 1 Comment

Mahmoud Khadijeh on 22 Jun 2019
Thank you very much, that's what I want

A=1:20;
blockSize = 5;
nOutputBlocks = 2;
a=reshape(A,blockSize,[]);
i=sort(reshape(randperm(size(a,2)),[],nOutputBlocks),2);
B=reshape(a(:,reshape(i',1,[])),blockSize*nOutputBlocks,[])

#### 1 Comment

Mahmoud Khadijeh on 22 Jun 2019
Thank you very much, that's works with me