File Exchange

## SHAKE

version 1.0 (2.11 KB) by

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

Updated

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).

Example:
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

Kevin Bolding

### Kevin Bolding (view profile)

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);

RAVI KUMAR

Thanks

J G

### 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.

 13 Dec 2006 dec 2006 - fixed major bug in functionality 12 Oct 2006 new algorithm return 2 indices 24 Aug 2006 SHAKE can now randomize along any dimension.
MATLAB 6.5 (R13)