Rearrange any matrix Randomly with a specific sequence

Mahmoud Khadijeh (view profile)

on 22 Jun 2019
Latest activity Commented on by Mahmoud Khadijeh

Mahmoud Khadijeh (view profile)

on 22 Jun 2019
Accepted Answer by infinity

infinity (view profile)

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 (view profile)

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

KALYAN ACHARJYA (view profile)

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 (view profile)

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 (view profile)

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

Mahmoud Khadijeh (view profile)

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

on 22 Jun 2019

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,[])