在MATLAB中使用矩阵中的randperm

时间:2017-04-20 15:31:39

标签: matlab matrix random

我有一个名为“featureMatrix”的矩阵。使用size(featureMatrix)结果是:11843 720.我想使用randperm来混洗这个矩阵的内容。首先,我使用rng(1)选择种子。然后我使用randperm:featureMatrixRnd = featureMatrix(randperm(length(featureMatrix))');。但它没有奏效。事实上,如果我写size(featureMatrixRnd),我获得11843 1,而不是11843 720.为什么?

3 个答案:

答案 0 :(得分:4)

因为您使用了length,它选择了最长的维度。首先使用numel代替length来获取所有元素,然后将reshape恢复为原始大小:

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

答案 1 :(得分:2)

此答案与Adriaan's类似,但不需要重新塑造:

featureMatrix(:) = featureMatrix(randperm(numel(featureMatrix)));

答案 2 :(得分:-3)

这是最好的解决方案:

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

使用

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

不好,因为我不需要独立地改变每一个想法