Disons que nous avons une matrice de taille 100x3
Comment mélanger les rangées dans MATLAB ?
Disons que nous avons une matrice de taille 100x3
Comment mélanger les rangées 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
des valeurs aléatoires et les trier, renvoyant la deuxième sortie de sort
comme résultat.
Votre solution fonctionne environ 2,5 fois plus vite que la mienne, du moins sur mon ordinateur.
Je pense que vous vouliez utiliser 'false'
- si l'on procède à un échantillonnage avec remplacement, la matrice résultante contiendra des lignes en double, tandis que d'autres auront disparu. Dans le cas d'un échantillonnage sans remplacement, randsample
appelle randperm
ce qui ne devrait donc être que légèrement plus lent que d'appeler randperm
directement.
En lisant le réponse de Jonas Je l'ai trouvé un peu difficile à lire, difficile à comprendre. Dans Mathworks, j'ai trouvé une version similaire question 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, il fait la même chose que Réponse de Jonas . Mais je pense que c'est un peu plus lisible, plus facile à comprendre.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Duplicata possible de Comment sélectionner aléatoirement k points parmi N points dans MATLAB ?
2 votes
Il ne s'agit pas de sélectionner, mais de "désordonner" ou de mélanger les lignes d'une matrice.
1 votes
En fait, vous avez raison. Ce n'est pas tout à fait la même question. Voir ma réponse ci-dessous.