生成2个随机数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成2个随机数相关的知识,希望对你有一定的参考价值。

如果β≥α,如何产生两个随机数α,β~U[-1,+ 1]?

我的第一个目的是生成两个向量,只采用满足β≥α的向量并丢弃其余的向量。

但是,我认为这可能会改变分布。

答案

你有几个简单的选择,但有些会偏向分布。

最简单的方法是生成一对数字并根据需要交换它们以满足您的条件。这应该产生均匀分布。

另一种选择是先生成α~[-1,+ 1],然后生成β~U[α,+ 1]。或者,您可以先生成β~[-1,+ 1]然后再生成α~[-1,β]。由于第二个数字不是统一生成的,因此该选项会发生偏差。

也许更好的方法是创建矢量(α,β)到数字线的1:1映射。然后生成一个数字,并将其转换为2D矢量。如果适当地选择映射,则这有可能提供向量的均匀分布。

另一答案

疯狂物理学家的答案已经相当广泛了,尽管第二种解决方案产生的结果实际上并不是随机的,因为首先将α~U[-1,+ 1]倾斜到右边并且β~U[-1,+ 1]会偏向左边。

对于这个问题,最直接的解决方案是生成α和β,然后在β<α时交换它们。结果将是均匀分布的。在Matlab中:

a = 2 * rand - 1;
b = 2 * rand - 1;
if b < a
    [b, a] = deal(a, b);
end
disp(a)
disp(b)

如果您将数字表示为整数,则只需将上述方法应用于整数即可。在Matlab中:

a = randi([-1, 1]);
b = randi([-1, 1]);
if b < a
    [b, a] = deal(a, b);
end
disp(a)
disp(b)

以上是关于生成2个随机数的主要内容,如果未能解决你的问题,请参考以下文章

JAVA怎样随机生成10W个数字, 要求: 10W个数字总等于50W而且每个数字最小1最大100, 求代码及思路

21个常用代码片段

求一个生成四位随机数的PHP代码

JS代码随机生成20个1到100内的奇数,并存到一个数组中

需要一个JavaScript代码,生成1--100之间的随机数一共一百个,每行显示10个数字,而且这

Python 和 C++ 下字符串查找速度对比,你觉得Python适合算法竞赛吗