Случайный порядок строк Matlab

42

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

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

  • 0
    Возможный дубликат Как мне случайно выбрать k точек из N точек в MATLAB?
  • 2
    Речь идет не о выборе, а о «разупорядочении» или перемешивании строк матрицы.
Показать ещё 1 комментарий
Теги:

3 ответа

64
Лучший ответ

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

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

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

  • 3
    Ваше решение работает примерно в 2,5 раза быстрее, чем мое, по крайней мере, на моем компьютере.
  • 0
    Спасибо Джонас. Работает как шарм. Если вместо этого вы хотите перетасовать столбцы матрицы, решение будет следующим: shuffledArray = orderArray (:, randperm (size (ordersArray, 2)))
5

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

matrix=matrix(randsample(1:length(matrix),length(matrix)),:);
  • 1
    Я думаю, что вы хотели использовать 'false' - если выборка с заменой, результирующая матрица будет содержать повторяющиеся строки, в то время как другие исчезнут. В случае выборки без замены randsample вызывает randperm , который, таким образом, должен быть лишь незначительно медленнее, чем прямой вызов randperm .
  • 0
    Исправлено, спасибо Джонас.
1

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню