Перетасовка списка в Mathematica

Какой лучший/самый простой способ перетасовать длинный список в Mathematica?

Ответ 1

RandomSample[list]

Да, это действительно так просто. По крайней мере, начиная с версии 6.

До введения RandomSample можно использовать:

#[[ Ordering[Random[] & /@ #] ]] & @ list

Ответ 2

Перед тем, как был введен RandomSample, я сильно использовал функцию MathGroup ниже, хотя RandomSample быстрее, по крайней мере, на одну величину на моей машине.

In[128]:= n = 10;
          set = [email protected]

Out[129]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

In[130]:= Take[set[[Ordering[RandomReal[] & /@ [email protected]]]], n]

Out[130]= {8, 4, 5, 2, 3, 10, 7, 9, 6, 1}

Другой проблемой, кроме производительности, является то, что если одни и те же случайные значения попадают дважды (невероятно, хотя это возможно) Заказ не даст этих двух в случайном порядке.

Ответ 3

В настоящее время я использую

list[[[email protected]@Length[list]]]

Это для Mathematica 8. Combinatorica также имеет функцию RandomPermutation (более ранние версии).

Я ищу другие/лучшие решения, если они есть.