Какой лучший/самый простой способ перетасовать длинный список в 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 (более ранние версии).
Я ищу другие/лучшие решения, если они есть.