在Mathematica中洗牌

时间:2011-05-09 10:33:00

标签: wolfram-mathematica shuffle

在Mathematica中填充长列表的最佳/最简单的方法是什么?

3 个答案:

答案 0 :(得分:21)

RandomSample[list]

是的,真的那么简单。至少从版本6开始。

在引入RandomSample之前,可以使用:

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

答案 1 :(得分:2)

在引入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}

除性能之外的其他问题是,如果相同的随机实数被击中两次(尽管可能不可能),订购将不会以随机顺序给出这两个。

答案 2 :(得分:1)

目前我使用

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

这适用于Mathematica 8. Combinatorica还具有RandomPermutation功能(早期版本)。

我正在寻找其他/更好的解决方案,如果有的话。