If you type open randperm (at least in Matlab R2010b), you will see that its output p for input M is
[~, p] = sort(rand(1,M));
So, to vectorize this for strings N ,
[~, P] = sort(rand(N,M), 2);
So generate p and use linear indexing in A :
[~, P] = sort(rand(N,M), 2); A = A(bsxfun(@plus, (1:N).', (P-1)*N));
Example: given
N = 3; M = 4; A = [ 1 2 3 4 5 6 7 8 9 10 11 12 ];
one (random) result
A = 2 3 1 4 7 5 8 6 9 11 12 10
source share