在 Mathematica 中打乱列表

发布于 2024-11-06 06:01:32 字数 40 浏览 0 评论 0原文

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

What's the best/easiest way to shuffle a long list in Mathematica?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦开始←不甜 2024-11-13 06:01:32
RandomSample[list]

是的,就是这么简单。至少从版本 6 开始。

在引入 RandomSample 之前,人们可能会使用:

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

Yes, it's really that simple. At least since version 6.

Before RandomSample was introduced, one might use:

#[[ Ordering[Random[] & /@ #] ]] & @ list
羞稚 2024-11-13 06:01:32

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

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

Before RandomSample was introduced, I've used the below MathGroup-function heavily, though RandomSample is faster at least by one magnitude on my machine.

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}

Other problem besides performance is that if the same random reals are hit twice (improbable, though possible) Ordering will not give these two in random order.

合约呢 2024-11-13 06:01:32

目前我使用的

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

是 Mathematica 8。Combinatorica 也有一个 RandomPermutation 函数(早期版本)。

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

Currently I use

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

This is for Mathematica 8. Combinatorica also has a RandomPermutation function (earlier versions).

I am looking for other/better solutions, if there are any.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文