【问题标题】:generating unique random numbers in Julia在 Julia 中生成唯一的随机数
【发布时间】:2016-12-23 02:47:00
【问题描述】:

此语句通常可以成功生成 3 个唯一的随机数,但有时它只生成 2 个唯一的数字。

rand(1:length(matches), 3)

我该如何重写它,以确保始终生成 3 个唯一的随机数。 (我也愿意使用其他功能等)

谢谢

【问题讨论】:

标签: random numbers julia


【解决方案1】:

StatsBase 中的示例函数有一个replace 选项。

例如

using StatsBase
sample(1:10, 3, replace=false)

这里的文档:https://statsbasejl.readthedocs.io/en/latest/

【讨论】:

    【解决方案2】:

    简单的答案:(下面有更完整的解释)

    using StatsBase
    MyRand = sample(1:10, 3, replace = false)   
    

    可能有很多复杂的情况。例如,每当绘制随机数时,总会有一些分布从中抽取。如果您正在绘制许多随机数,那么统计学中对此的通常描述是您正在从多维分布中绘制。如果您的分布是离散的(即任何特定数字都有被选中的正概率),如果您指定没有两个条目可以彼此相等,那么它实际上将是一个不同的分布。因此,根据您的具体需求,这可能会相对较快地变得相对复杂。例如。如果您想要 5 个泊松随机变量,但规定没有两个彼此相等 - 在代码中完成此操作相对简单,但会产生此问题的分布细节更复杂,您绘制的变量将不再是标准泊松随机变量。根据您的应用程序,这可能对您来说很重要,也可能不重要。

    但是,在这种情况下,您似乎只是想从某种列表中选择三个随机元素,为每个被选中的元素分配相等的概率,并确保没有元素被选中两次。在这种情况下,来自 StatsBase 的 sample() 函数可以解决问题,选择 replace = false 选项(即“无替换”抽样意味着一旦选择了可能结果池中的数字)。

    【讨论】:

      【解决方案3】:

      嗯,这取决于 length(matches) 的数量。

      我建议你可以尝试这三种方法来找到一种时间成本最低的方法:

          n = length(matches)
          using Random
          shuffle(1:n)[1:3]
          randperm(n)[1:3]
      
          using StatsBase
          sample(1:n, 3, replace=false)
      

      【讨论】:

        猜你喜欢
        • 2016-07-03
        • 1970-01-01
        • 2011-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多