python - 仅生成具有特定数字的随机数

标签 python random

如何从一组特定的数字生成随机数?例如,
我想从 1-100,000 范围内生成数字,这样每个数字只有奇数位(例如:111135119711等)

使用我尝试过的随机模块:

import random

rand = random.randint([1, 3, 5, 7, 9]) 

有什么有效的方法吗?
谢谢。

最佳答案

一种方法是定义一个概率列表,从中进行抽样,但要记住随机抽样一个数字的可能性应该有多大。由于两位数的数量是一位数的十倍,我们需要按照这个逻辑来设置这些样本大小的权重。

按照这个推理,我们可以使用 numpy.random.choice,它允许按照概率分布从列表中抽样:

from numpy.random import choice

odds = ['1','3','5','7','9']

n_digits = 5 # up to 99999 for ex
range_digits = list(range(1,n_digits))

weights = [5**i for i in range_digits]
weights_sum = sum(weights)
probs = [i/weights_sum for i in weights]

sizes = choice(range_digits,size=n,p=probs)
[int(''.join(choice(odds,size))) for size in sizes]
# [3151, 3333, 1117, 7577, 1955, 1793, 5713, 1595, 5195, 935]

让我们检查生成的 10_000 个样本的分布:

from collections import Counter

sizes = choice(range_digits,size=10_000,p=probs)
out = [int(''.join(choice(odds,size))) for size in sizes]

Counter(len(str(i)) for i in out)
# Counter({4: 8099, 3: 1534, 2: 304, 1: 63})

关于python - 仅生成具有特定数字的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62931500/

相关文章:

python - 使用 openCV 检测线的孔、末端和起点?

python - 将python模块从ide复制并使用到服务器是否可行?

python - 在 Visual-studio-code 中设置 python virtualEnv 时出错

c++ - 特定 C++ 随机数生成的 Clang 性能下降

c++ - 计算分布的逆CDF

C# Seeding StaticRandom in parallel.for 以获得可重现的序列

python - 我怎样才能干净地规范化数据然后 "unnormalize"呢?

python - If 和 For 语句的花式反向语法

random - LibGDX 内部调用 MathUtils.random() 干扰生成的随机数序列

python - while 循环不起作用/永远循环 |初学者问题