Случайный порядок строк Matlab - PullRequest
42 голосов
/ 26 марта 2011

Скажем, у нас есть матрица размером 100x3

Как бы вы перемешали строки в MATLAB?

Ответы [ 4 ]

70 голосов
/ 26 марта 2011

Чтобы перемешать строки матрицы, вы можете использовать RANDPERM

shuffledArray = orderedArray(randperm(size(orderedArray,1)),:);

randperm создаст список N случайных значений и отсортирует их, возвращаявывод sort как результат.

5 голосов
/ 26 марта 2011

Это можно сделать, создав новый случайный индекс для строк матрицы с помощью функции Matlab randsample .

matrix=matrix(randsample(1:length(matrix),length(matrix)),:);
2 голосов
/ 05 февраля 2018

Читая ответ Джонаса , я обнаружил, что его трудно читать, трудно понять.В Mathworks я нашел похожий вопрос , где ответ более читабелен, легче для понимания.Взяв идею из Mathworks, я написал функцию:

function ret = shuffleRow(mat)

[r c] = size(mat);
shuffledRow = randperm(r);
ret = mat(shuffledRow, :);

На самом деле это то же самое, что и ответ Джонаса .Но я думаю, что это немного более читабельно, легче понять.

1 голос
/ 10 июня 2016

Для больших наборов данных вы можете использовать пользовательскую функцию Shuffle

Он использует алгоритм случайного числа DE Knuth (также называемый Fisher-Yates) и симпатичный генератор случайных чисел KISSГ. Марсалья).

...