Shuffle matrix elements

111 ビュー (過去 30 日間)
Raviteja
Raviteja 2011 年 11 月 3 日
Hey guys, I want to shuffle a 3x3 matrix (which consist elements within 1:9 unrepeated). So that I have written a very strange code.
>>X=perms(1:9);
Execute above line once.
Then execute below line how many shuffled matrices you want.
>>SMx=reshape(X(randi(size(X,1)),:),3,3)
Is there any better way to do this?

採用された回答

Jan
Jan 2011 年 11 月 3 日
SMx = reshape(randperm(9), 3, 3);
If you have Matlab 2011b, use "randperm(9, 9)" instead: It uses the Fisher-Yates-Shuffle, which is much faster. And if you struggle with large arrays, this is even faster: FEX: Shuffle.

その他の回答 (2 件)

Fangjun Jiang
Fangjun Jiang 2011 年 11 月 3 日
I believe it means to be randperm(), not perms().
OrigData=magic(3);
X=randperm(numel(OrigData));
ShuffledData=reshape(OrigData(X),size(OrigData))
  1 件のコメント
Jan
Jan 2011 年 11 月 3 日
PERMS is correct: Raviteja produces *all* permutations at first and chooses a specific one afterwards. This needs a lot of memory...

サインインしてコメントする。


Amgad Mohsen
Amgad Mohsen 2012 年 8 月 9 日
A function file as I did with out randperm()
function W = randomize(A)
[m,n] = size(A);
E = A(:);
W(1) = E(1);
E(1) =[];
N = m*n;
while length(E) > 0
K = length(W);
RandInd = randi(length(E),1);
for j = 1: K
P(j) = E(RandInd) ~= W(j);
end
if all(P)
W =[W,E(RandInd)];
E(RandInd) =[];
end
end
W = reshape(W,m,n);

カテゴリ

Help Center および File ExchangeCharacters and Strings についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by