How to vectorize random permutation of data
2 views (last 30 days)
Show older comments
Eric Fields
on 27 Nov 2016
Edited: Roger Stafford
on 28 Nov 2016
I need to randomly permute a set of data, and I need to do it 10,000 or more times, so I need to do it efficiently. Below is an example of how I'm doing it (with randomly generated data standing in for real data). I feel like there should be a way to vectorize the permutation process instead of the for-loop I'm using, but I can't think of how to do it. I need a method that works for any number of data points--i.e., below I am permuting two data points for each hypothetical subject, but I need to generalize to three, four, etc.
data = rand(24, 2);
for j = 1:24
perm_data(i, :) = data(i, randperm(2));
end
%Do some calculations on the permuted data here
0 Comments
Accepted Answer
Roger Stafford
on 28 Nov 2016
Edited: Roger Stafford
on 28 Nov 2016
You wish to randomly permute each of the rows of ‘data’. Then do this:
(Simplified)
[m,n] = size(data);
[~,p] = sort(rand(m,n),2);
perm_data = reshape(data(repmat((1-m:0).’,n,1)+p(:)*m),m,n);
0 Comments
More Answers (0)
See Also
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!