如何在 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])
这两个区间看起来相当一致。
我想在 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])
这两个区间看起来相当一致。