当前位置: 首页 > 知识库问答 >
问题:

如何使用numpy在分段间隔上生成随机数

鲁旭
2023-03-14

我在python中使用numpy模块来生成随机数,当我需要在[a, b]等连续间隔内生成随机数时,我会使用

(b-a)*np.random.rand(1)+a

但是现在我需要在区间[a,b]和[c,d]中生成一个统一的随机数,我该怎么办?

我想生成一个在所有区间长度上均一的随机数,我不选择概率相等的区间,然后在区间内生成一个随机数,如果[a, b]和[c, d]长度相等,这种使用没有问题,但是当区间长度不相等时,这种方法生成的随机数不是完全均匀的。

共有3个答案

沈飞舟
2023-03-14

这里有一个食谱:

def random_multiinterval(*intervals, shape=(1,)):
    # FIXME assert intervals are valid and non-overlapping
    size = sum(i[1] - i[0] for i in intervals)
    v = size * np.random.rand(*shape)
    res = np.zeros_like(v)
    for i in intervals:
        res += (0 < v) * (v < (i[1] - i[0])) * (i[0] + v)
        v -= i[1] - i[0]
    return res

In [11]: random_multiinterval((1, 2), (3, 4))
Out[11]: array([1.34391171])

In [12]: random_multiinterval((1, 2), (3, 4), shape=(3, 3))
Out[12]:
array([[1.42936024, 3.30961893, 1.01379663],
       [3.19310627, 1.05386192, 1.11334538],
       [3.2837065 , 1.89239373, 3.35785566]])

注意:这均匀分布在N个(非重叠)间隔上,即使它们具有不同的大小。

越嘉树
2023-03-14

你可以使用

np.random.uniform(a,b)

对于介于a和b之间的随机数(包括a但不包括b)

所以对于[a, b]和[c, d]中的随机数,可以使用

np.random.choice( [np.random.uniform(a,b) , np.random.uniform(c,d)] )
郑哲彦
2023-03-14

你可以这样做

a,b,c,d = 1,2,7,9
N = 10
r = np.random.uniform(a-b,d-c,N)
r += np.where(r<0,b,c)
r
# array([7.30557415, 7.42185479, 1.48986144, 7.95916547, 1.30422703,
#        8.79749665, 8.19329762, 8.72669862, 1.88426196, 8.33789181])
 类似资料:
  • 我试图生成8个范围内的随机数,例如1到100。我生成的很好,但我需要生成随机数,所有生成的随机数和最小-最大范围值之间的特定差异被排除。假设在1到100中,我必须生成2,12,22,32,42,52,62,72的数字。不管怎样,我都可以生成这样的随机数。 提前谢谢。

  • 我是xslt的新手。我想使用xslt生成32位长UUID并将其作为输入添加到xml中。我试图使用数学自由的随机函数,但得到错误。 输入XML XSLT代码段 我正在使用在线编辑器,但得到如下异常。http://xslttest.appspot.com/ 错误:找不到名为的匹配0参数函数{http://exslt.org/math}随机()。没有具有本地名称random的Saxon扩展函数 实际上,

  • 我试图在Java程序中实现一个随机数生成器。我在用数学。random(),但这似乎效果不太好。然后我尝试使用SecureRandom,但这对我的游戏来说太长了。然而,我遇到了这个生成器,MersenNetWisterng随机数生成器。这似乎是我想要的;速度很快,但仍然是随机的。 然而,我已经很长时间没有用Java编写了,只有2个月,我对API既不了解也不了解。如果有人能帮我解释一下如何在我的代码中

  • 问题内容: 我想生成一个随机时间戳,并向其添加一个随机增量,以生成第二个时间戳。那可能吗? 如果我传递随机的long值来创建时间戳,并且我想随机生成该long值,那么生成该值以给出2012年的时间戳的约束是什么? 问题答案: 您需要将随机数缩放到特定年份的范围,然后将年份的开始添加为偏移量。一年中的毫秒数从一年到另一年(le年有额外的一天,某些年份有leap分钟,依此类推),因此您可以按以下步骤确

  • 问题内容: 如何使用Math.random生成随机整数? 我的代码是: 它显示的全部是0,我该如何解决? 问题答案: 将abc转换为整数。

  • 问题内容: 在java中如何生成随机数? 问题答案: 在Java 1.7或更高版本中,执行此操作的标准方法如下: 请参阅相关的JavaDoc。这种方法的优点是不需要显式初始化java.util.Random实例,如果使用不当,可能会引起混乱和错误。 但是,相反,没有办法明确设置种子,因此在有用的情况下(例如测试或保存游戏状态或类似情况),很难重现结果。在这种情况下,可以使用下面显示的Java 1.