J'ai une matrice appelée "featureMatrix". en utilisant size(featureMatrix) le résultat est: 11843 720. Je veux mélanger le contenu de cette matrice en utilisant randperm. Je choisis d'abord la graine en utilisant rng(1). Ensuite, j'utilise randperm: featureMatrixRnd = featureMatrix(randperm(length(featureMatrix))');. Mais cela n'a pas bien fonctionné. En fait si j'écris size(featureMatrixRnd) j'obtiens 11843 1, au lieu de 11843 720. pourquoi?

-2
Alfonso Silvestri 20 avril 2017 à 18:31

3 réponses

Meilleure réponse

C'est la meilleure solution:

rng(1);
idx = randperm(size(featureMatrix,1));
outfeatureMatrixRnd = featureMatrix(idx,:);

En utilisant

OrgSize = size(featureMatrix);
featureMatrixRnd = randperm(numel(featureMatrix));
out = reshape(featureMatrix(featureMatrixRnd),OrgSize);

N'est pas bon, parce que je n'ai pas besoin de mélanger tout indépendamment

-3
Adriaan 22 avril 2017 à 07:54

Cette réponse est similaire à Adriaan, mais ne nécessite pas de remodelage:

featureMatrix(:) = featureMatrix(randperm(numel(featureMatrix)));
2
Community 23 mai 2017 à 12:26

Parce que vous avez utilisé length, qui sélectionne la dimension la plus longue. Utilisez d'abord numel au lieu de length pour obtenir tous les éléments, puis reshape revenir à votre taille d'origine:

OrgSize = size(featureMatrix);
featureMatrixRnd = randperm(numel(featureMatrix));
out = reshape(featureMatrix(featureMatrixRnd),OrgSize);
4
Adriaan 20 avril 2017 à 16:29