サイズが100x3のマトリックスがあるとします
MATLABで行をどのようにシャッフルしますか?
行列の行をシャッフルするには、 [〜#〜] randperm [〜#〜] を使用できます。
shuffledArray = orderedArray(randperm(size(orderedArray,1)),:);
randperm
は、N
ランダム値のリストを生成してソートし、sort
の2番目の出力を結果として返します。
これは、Matlabのrandsample関数を使用して、行列の行に新しいランダムインデックスを作成することで実行できます。
matrix=matrix(randsample(1:length(matrix),length(matrix)),:);
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))。