Перемешать матричный элемент в матлабе

У меня есть martix и вы хотите перетасовать его элемент.

x=[1 2 5 4 6 ]

после перетасовки (что-то вроде этого)

x=[2 4 6 5 1]    

есть функция Matlab для нее? в php array_shuffle выполните это.

Ответ 1

  • получают перетасованные индексы с помощью randperm

    idx = randperm(length(x));
    
  • использовать индексы для получения перетасованного вектора

    xperm = x(idx);

Ответ 2

В качестве альтернативы randperm вы также можете использовать randsample из панели инструментов статистики.

y = randsample(n,k) возвращает a k -by- 1 vector y значений, выбранных равномерно случайным образом, без замены, от целых чисел 1 до n.

Обратите внимание, что это "без замены" (по умолчанию). Поэтому, если вы установите k как length(x), это эквивалентно случайному перемещению вектора. Например:

x = 1:5;
randsample(x,length(x))
%ans = 
%       4     5     3     1     2

Мне нравится это больше, чем randperm, потому что он легко расширяется для разных целей. Например, чтобы случайно выделить 3 элемента из x (например, рисование из ведра с конечными элементами), вы делаете randsample(x,3). Аналогично, если вы хотите нарисовать 3 числа, где алфавит состоит из элементов x, но разрешите повторения, вы делаете randsample(x,3,true).