How to vectorize random permutation of data

1 Ansicht (letzte 30 Tage)
Eric Fields
Eric Fields am 27 Nov. 2016
Bearbeitet: Roger Stafford am 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

Akzeptierte Antwort

Roger Stafford
Roger Stafford am 28 Nov. 2016
Bearbeitet: Roger Stafford am 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);

Weitere Antworten (0)

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by