生成具有非均匀分布的随机整数

佐伊

我一直试图找到一种方法来生成一个数字,它更有可能在一个范围的中间生成一个数字。鉴于:

rnum = r.nextInt(5) + 1;//+ 1 to exclude 0

生成 1 到 5 之间的完全随机数(如果+ 1删除则为 0 和 4 )。我想要做的是生成更少的 1 和 5,并生成很多 3。我试过这个:

int[] classes = {1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5};
System.out.println("Class " +  classes[r.nextInt(15)]);//logs the output

但它会生成这个:(打印语句重复 10 次)

Class 2
Class 3
Class 1
Class 4
Class 3
Class 4
Class 2
Class 3
Class 2
Class 5

然而,这既不是有效的方法,也不是一个好的方法。此外,由于用于检索数字的随机数生成器是完全随机的,而不是关注中心值,因此输出如上。3 只出现 30% 的时间,这太低了。2 出现的概率也为 30%,这意味着(在此测试中)它与 3 的生成概率相同。

那么,如何以更高的概率随机生成一个数字以在一个范围的中间生成一个数字?

阿维斯克

最简单的方法是从包含所需概率的数组开始。

import java.util.Random;

class Main {

    public static int getOneNumber(double[] probs, Random rnd) {
        double r = rnd.nextDouble();
        for (int j = 0; j < probs.length; j++) {
            if (r < probs[j]) {
                return j;
            }
            r -= probs[j];
        }
        throw new RuntimeException("probabilities should sum to 1");
    }


    public static void main(String[] args) {

        // Desired probabilities
        double[] probabilities = {
            0.05, // 0
            0.15, // 1
            0.6, // 2
            0.15, // 3
            0.05 }; // 4

        Random rnd = new Random();
        for (int i = 0; i < 20; i++) {
            System.out.println(getOneNumber(probabilities, rnd));
        }
    }
}

这里的想法如下。我们生成 0 到 1 之间的随机数。现在我们检查:它是否低于 0.05?如果是,我们返回 0——它发生的概率为 0.05。如果不是,我们检查我们的数字是否在 0.05 和 0.15 之间(通过从中减去 0.05 并与 0.1 进行比较)。如果是(这种情况发生的概率为 0.15-0.05 = 0.1)——我们得到 1。如果不是,我们检查随机数是否在 0.15 和 0.75 之间,等等。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从均匀分布生成伪随机数

来自分类Dev

证明随机产生的数是均匀分布的

来自分类Dev

快速均匀分布随机数生成器

来自分类Dev

随机均匀分布

来自分类Dev

给定比例的随机非均匀分布

来自分类Dev

C ++线程安全的均匀分布随机数生成

来自分类Dev

生成强连通的,均匀分布的随机有向图

来自分类Dev

使用C ++中使用均匀实数分布生成的随机数不是真正均匀分布的

来自分类Dev

如何将一个整数随机分为固定数量的整数,以使获得的元组均匀分布?

来自分类Dev

在C中生成随机,均匀分布的实数

来自分类Dev

在空心方形薄片内生成随机均匀分布点的Python方法

来自分类Dev

如何生成均匀分布的整数序列?

来自分类Dev

是否将随机整数强制转换为短整数给出均匀分布?

来自分类Dev

在圆角矩形内生成均匀分布的随机位置

来自分类Dev

如何有效地在bash中生成大的,均匀分布的随机整数?

来自分类Dev

在C#中具有均匀分布的整数数组重新排序?

来自分类Dev

通过均匀分布的RNG生成3个不同的随机整数

来自分类Dev

Numpy如何从非均匀分布中采样随机数?

来自分类Dev

生成从最小到最大范围内的均匀分布的整数的列表

来自分类Dev

如何有效地在bash中生成大的,均匀分布的随机整数?

来自分类Dev

具有R中均匀分布元素的随机向量a

来自分类Dev

随机均匀分布

来自分类Dev

如何在python中生成独立的均匀分布(iid)随机变量

来自分类Dev

生成具有均匀分布的随机数(循环获得相同的数)

来自分类Dev

在具有给定属性的matlab中生成均匀分布的延迟

来自分类Dev

如何生成均匀分布的整数序列?

来自分类Dev

用具有不同范围的均匀分布的随机数填充多维矩阵

来自分类Dev

使用 cuRand 从均匀分布生成随机整数的正确方法是什么?

来自分类Dev

verilog中均匀分布的随机实数

Related 相关文章

  1. 1

    从均匀分布生成伪随机数

  2. 2

    证明随机产生的数是均匀分布的

  3. 3

    快速均匀分布随机数生成器

  4. 4

    随机均匀分布

  5. 5

    给定比例的随机非均匀分布

  6. 6

    C ++线程安全的均匀分布随机数生成

  7. 7

    生成强连通的,均匀分布的随机有向图

  8. 8

    使用C ++中使用均匀实数分布生成的随机数不是真正均匀分布的

  9. 9

    如何将一个整数随机分为固定数量的整数,以使获得的元组均匀分布?

  10. 10

    在C中生成随机,均匀分布的实数

  11. 11

    在空心方形薄片内生成随机均匀分布点的Python方法

  12. 12

    如何生成均匀分布的整数序列?

  13. 13

    是否将随机整数强制转换为短整数给出均匀分布?

  14. 14

    在圆角矩形内生成均匀分布的随机位置

  15. 15

    如何有效地在bash中生成大的,均匀分布的随机整数?

  16. 16

    在C#中具有均匀分布的整数数组重新排序?

  17. 17

    通过均匀分布的RNG生成3个不同的随机整数

  18. 18

    Numpy如何从非均匀分布中采样随机数?

  19. 19

    生成从最小到最大范围内的均匀分布的整数的列表

  20. 20

    如何有效地在bash中生成大的,均匀分布的随机整数?

  21. 21

    具有R中均匀分布元素的随机向量a

  22. 22

    随机均匀分布

  23. 23

    如何在python中生成独立的均匀分布(iid)随机变量

  24. 24

    生成具有均匀分布的随机数(循环获得相同的数)

  25. 25

    在具有给定属性的matlab中生成均匀分布的延迟

  26. 26

    如何生成均匀分布的整数序列?

  27. 27

    用具有不同范围的均匀分布的随机数填充多维矩阵

  28. 28

    使用 cuRand 从均匀分布生成随机整数的正确方法是什么?

  29. 29

    verilog中均匀分布的随机实数

热门标签

归档