Перемешивание списка в Mathematica - PullRequest
13 голосов
/ 09 мая 2011

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

Ответы [ 3 ]

21 голосов
/ 09 мая 2011
RandomSample[list]

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

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

#[[ Ordering[Random[] & /@ #] ]] & @ list
2 голосов
/ 10 мая 2011

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

In[128]:= n = 10;
          set = Range@n

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

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

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

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

1 голос
/ 09 мая 2011

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

list[[PermutationList@RandomPermutation@Length[list]]]

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

Я ищу другие / лучшие решения, если таковые имеются.

...