在Mathematica中填充长列表的最佳/最简单的方法是什么?
答案 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功能(早期版本)。
我正在寻找其他/更好的解决方案,如果有的话。