Disons que nous avons une matrice de taille 100x3
Comment mélangeriez-vous les lignes dans MATLAB?
Pour mélanger les lignes d'une matrice, vous pouvez utiliser RANDPERM
shuffledArray = orderedArray(randperm(size(orderedArray,1)),:);
randperm
générera une liste de N
valeurs aléatoires et les triera, renvoyant la deuxième sortie de sort
comme résultat.
Cela peut être fait en créant un nouvel index aléatoire pour les lignes de la matrice via la fonction randsample de Matlab.
matrix=matrix(randsample(1:length(matrix),length(matrix)),:);
En lisant le réponse de Jonas je l'ai trouvé un peu difficile à lire, difficile à comprendre. Dans Mathworks, j'ai trouvé un question similaire où la réponse est plus lisible, plus facile à comprendre. En prenant l'idée de Mathworks, j'ai écrit une fonction:
function ret = shuffleRow(mat)
[r c] = size(mat);
shuffledRow = randperm(r);
ret = mat(shuffledRow, :);
En fait, cela fait la même chose que réponse de Jonas . Mais je pense que c'est un peu plus lisible, plus facile à comprendre.
Pour les grands ensembles de données, vous pouvez utiliser la fonction personnalisée Shuffle
Il utilise D.E. L'algorithme de lecture aléatoire de Knuth (également appelé Fisher-Yates) et le mignon KISS générateur de nombres aléatoires (G. Marsaglia).