web-dev-qa-db-fra.com

Ordre aléatoire des lignes Matlab

Disons que nous avons une matrice de taille 100x3

Comment mélangeriez-vous les lignes dans MATLAB?

42
cMinor

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.

70
Jonas

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)),:);
5
KnowledgeBone

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.

2

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).

1
Rahul