web-dev-qa-db-ja.com

行のランダムな順序Matlab

サイズが100x3のマトリックスがあるとします

MATLABで行をどのようにシャッフルしますか?

42
cMinor

行列の行をシャッフルするには、 [〜#〜] randperm [〜#〜] を使用できます。

shuffledArray = orderedArray(randperm(size(orderedArray,1)),:);

randpermは、Nランダム値のリストを生成してソートし、sortの2番目の出力を結果として返します。

70
Jonas

これは、Matlabのrandsample関数を使用して、行列の行に新しいランダムインデックスを作成することで実行できます。

matrix=matrix(randsample(1:length(matrix),length(matrix)),:);
5
KnowledgeBone

Jonasの回答 を読んでいると、読むのが少し難しく、理解するのが難しいことがわかりました。 Mathworksで、同様の question を見つけました。答えはより読みやすく、理解しやすいものです。 Mathworksからアイデアを得て、関数を作成しました。

function ret = shuffleRow(mat)

[r c] = size(mat);
shuffledRow = randperm(r);
ret = mat(shuffledRow, :);

実際には Jonas 'answer と同じことをします。しかし、もう少し読みやすく、理解しやすいと思います。

大規模なデータセットの場合、カスタム Shuffle 関数を使用できます

D.Eを使用します。 Knuthのシャッフルアルゴリズム(Fisher-Yatesとも呼ばれます)およびかわいいKISS=乱数ジェネレーター(G. Marsaglia))。

1
Rahul