不均匀/不均匀分布的随机浮点数
Unequally/ unevenly distributed random floats
如何在 X 和 Y 之间生成不均匀分布的随机浮点数,以便更有可能生成 X 到 Y 内特定范围内的数字?
我确实搜索了很多关键字来找到这样的东西,包括:不均匀分布的随机数,或不均匀的噪声分布,或有偏差的随机浮点数,或加权随机数......
我所能找到的只是从一袋有限的值列表中随机选择,加权以便更有可能选择某些值,但我希望从 X 和 X 之间的无限范围的浮点数中进行选择Y.
我还发现了很多关于如何不生成有偏差的随机数的文章,这与我想要的相反。
举个例子,说明我想用这些数字做什么:如果你在白色方块中画黑噪声,每个噪声点都在方块内的随机位置,如果你生成足够多的点,你会有一个几乎是黑色的方块。
如果你把概率更高的随机分布在正方形中间,你会在正方形中间画出一个几乎柔和的黑点。这就是我要生成的内容。
所以我的问题是:
- 我确定存在这些算法,它们是如何命名的?
- 也许有人可以用任何语言建议快速实施吗?
- 如何指定偏差的权重?例如:在特定范围内生成数字的可能性是 2 倍,还是 5 倍?在我的点示例中,我相信如果获得范围内数字的可能性增加 5 倍,则该点会更小更暗。
- 如何指定分布的柔和度?例如:线性的、长线性的、二次的。在我的圆点示例中,我相信它会使圆点变软或变硬。
提前致谢!
这些通常被称为绝对连续分布,下面是定义这种分布的两种方式
- 作为 probability density function, which is (roughly speaking) a function that gives the probability weight of any number. If you have a distribution in this form, some of the ways to sample from this distribution include piecewise linear interpolation, rejection sampling, and Markov chain Monte Carlo methods. For further information, see "Random Numbers from an Arbitrary Distribution".
- 作为从 X 到 Y 的各个点的权重列表。这些点之间的权重是线性插值的。在 C++ 中给出了从该分布中采样的一种方法示例
std::piecewise_linear_distribution
. See also "Piecewise Linear Distribution".
对于许多流行的分布,例如正态分布、beta 分布和 gamma 分布,有一些特殊的方法可以用这些分布生成随机数。事实上,正态分布的此类方法有许多不同的设计。对于有界范围内的数字,beta distribution 是一个理想的选择;它的两个参数(alpha 和 beta)描述了可以满足您的目的的各种形状。 Python 有一个 random.betavariate(alpha, beta)
生成 β 分布随机数的方法。
如何在 X 和 Y 之间生成不均匀分布的随机浮点数,以便更有可能生成 X 到 Y 内特定范围内的数字?
我确实搜索了很多关键字来找到这样的东西,包括:不均匀分布的随机数,或不均匀的噪声分布,或有偏差的随机浮点数,或加权随机数......
我所能找到的只是从一袋有限的值列表中随机选择,加权以便更有可能选择某些值,但我希望从 X 和 X 之间的无限范围的浮点数中进行选择Y.
我还发现了很多关于如何不生成有偏差的随机数的文章,这与我想要的相反。
举个例子,说明我想用这些数字做什么:如果你在白色方块中画黑噪声,每个噪声点都在方块内的随机位置,如果你生成足够多的点,你会有一个几乎是黑色的方块。
如果你把概率更高的随机分布在正方形中间,你会在正方形中间画出一个几乎柔和的黑点。这就是我要生成的内容。
所以我的问题是:
- 我确定存在这些算法,它们是如何命名的?
- 也许有人可以用任何语言建议快速实施吗?
- 如何指定偏差的权重?例如:在特定范围内生成数字的可能性是 2 倍,还是 5 倍?在我的点示例中,我相信如果获得范围内数字的可能性增加 5 倍,则该点会更小更暗。
- 如何指定分布的柔和度?例如:线性的、长线性的、二次的。在我的圆点示例中,我相信它会使圆点变软或变硬。
提前致谢!
这些通常被称为绝对连续分布,下面是定义这种分布的两种方式
- 作为 probability density function, which is (roughly speaking) a function that gives the probability weight of any number. If you have a distribution in this form, some of the ways to sample from this distribution include piecewise linear interpolation, rejection sampling, and Markov chain Monte Carlo methods. For further information, see "Random Numbers from an Arbitrary Distribution".
- 作为从 X 到 Y 的各个点的权重列表。这些点之间的权重是线性插值的。在 C++ 中给出了从该分布中采样的一种方法示例
std::piecewise_linear_distribution
. See also "Piecewise Linear Distribution".
对于许多流行的分布,例如正态分布、beta 分布和 gamma 分布,有一些特殊的方法可以用这些分布生成随机数。事实上,正态分布的此类方法有许多不同的设计。对于有界范围内的数字,beta distribution 是一个理想的选择;它的两个参数(alpha 和 beta)描述了可以满足您的目的的各种形状。 Python 有一个 random.betavariate(alpha, beta)
生成 β 分布随机数的方法。