File Exchange

image thumbnail


version 1.0 (2.11 KB) by

Randomize a matrix along one dimension (ver 4 .1 may 2008)



View License

SHAKE - Randomize a matrix along a specific dimension

Y = SHAKE(X) randomizes the order of the elements in each column of the 2D matrix. For N-D matrices it randomizes along the first dimension.

SHAKE(X,DIM) randomizes along the dimension DIM.

[Y, I, J] = SHAKE(...) return index matrices I and J so that Y = X(I) and X = Y(J).

A = [1 2 3 ; 4 5 6 ; 7 8 9 ; 10 11 12] ; % see <slm> on the FEX ...
Dim = 2 ;
[B, ID] = shake(A,Dim) % ->, e.g.
% 3 2 1
% 6 4 5
% 7 8 9
% 11 10 12%

and RANDSWAP on the File Exchange

Latest version: 4.1 (may 2008)

Comments and Ratings (8)

Kevin Bolding

I found I needed to change line 68 when going to higher dimensions. Not thoroughly tested but this may work:
I = shiftdim(reshape(I,sz),dim-ndim);




J G (view profile)

Thanks, this is just what I needed. However I'm finding it to be quite slow. I have ~10000 rows and 5 columns, and I am randomising by column (Dim = 1). Do you have any suggestions as to how to speed this up? Is doing each column vector separately faster?

Jos (author)

New version: 3.0 (oct 2006)

Gregory Anderson

Simple? Yes, but I couldn't figure out how to do it on my own, and it does exactly what it's supposed to do, so thanks, Jos.

Jos vdG

Which tests? Note that <shake> simply uses the built-in matlab <rand> function ...

Peter He

Tests show that the quality of randomization is not good. Cannot be trusted in serious simulations.

John D'Errico

Its not shaky at all. Certainly not its documentation, which is as clear as even I could ask for.


dec 2006 - fixed major bug in functionality

new algorithm
return 2 indices

SHAKE can now randomize along any dimension.

MATLAB Release
MATLAB 6.5 (R13)

Inspired: RANDSWAP, Permute a grouped vector, randone1

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Win prizes and improve your MATLAB skills

Play today