如何在 Python 中的两个区间之一随机生成随机数

How to randomly generate random numbers in one of two intervals in Python

我想在 python.

中生成两个不同范围 [0, 0.3) 和 [0.7, 1) 的随机数

numpy.random.uniform 可以选择仅从一个特定间隔生成。

参考这个帖子希望它能解决您的问题。 但答案如下:

def random_of_ranges(*ranges):
  all_ranges = sum(ranges, [])
  return random.choice(all_ranges)
print(random_of_ranges(range(65, 90), range(97, 122)))

这个怎么样?

first_interval = np.array([0, 0.3])
second_interval = np.array([0.7, 1])

total_length = np.ptp(first_interval)+np.ptp(second_interval)
n = 100
numbers = np.random.random(n)*total_length
numbers += first_interval.min()
numbers[numbers > first_interval.max()] += second_interval.min()-first_interval.max()

我假设您想选择一个区间,其概率按其大小加权,然后从所选区间均匀采样。在这种情况下,以下 Python 代码将执行此操作:

import random

# Define the intervals.  They should be disjoint.
intervals=[[0, 0.05], [0.7, 1]]
# Choose one number uniformly inside the set
random.uniform(*random.choices(intervals,
   weights=[r[1]-r[0] for r in intervals])[0])

import numpy

# Generate a NumPy array of given size
size=1000
numpy.asarray([ \
    random.uniform(*random.choices(intervals,
        weights=[r[1]-r[0] for r in intervals])[0]) \
    for i in range(1000)])

请注意,您给出的间隔 [[0, 0.3], [0.7, 1]] 似乎是任意的;此解决方案适用于任意数量的不相交间隔,并且它从这些间隔的并集中随机均匀采样。

您可以将这两个区间的随机数连接起来。

import numpy as np


rng = np.random.default_rng(12345)
a = rng.uniform(0, 0.3,1000)
b = rng.uniform(0.7, 1,1000)

my_rnd = np.concatenate([a, b])

这两个区间看起来相当一致。