相关疑难解决方法(0)

随机加权选择

我有这样的数据:

d = (
  (701, 1, 0.2),
  (701, 2, 0.3),
  (701, 3, 0.5),
  (702, 1, 0.2),
  (702, 2, 0.3),
  (703, 3, 0.5)
)
Run Code Online (Sandbox Code Playgroud)

其中(701,1,0.2)=(id1,id2,priority)

如果我知道id1,使用优先级,有没有一种选择id2的漂亮方法?

Func(701)应该返回:
  1 - 在20%的情况下
  2 - 30%
  3 - 50%

百分比当然很粗糙

python

14
推荐指数
1
解决办法
6254
查看次数

(Python)算法根据比例/权重随机选择一个键

关于如何找到一个干净的算法来执行以下操作,我有点不知所措:

假设我有一个字典k:

>>> k = {'A': 68, 'B': 62, 'C': 47, 'D': 16, 'E': 81}
Run Code Online (Sandbox Code Playgroud)

我现在想要根据它们在总(即总和)数量上的"权重"随机选择其中一个键.

>>> sum(k.values()) 
>>> 274
Run Code Online (Sandbox Code Playgroud)

所以有一个

>>> 68.0/274.0
>>> 0.24817518248175183
Run Code Online (Sandbox Code Playgroud)

选择A的变化率为24.81%.

你会如何编写一个能够解决这个问题的算法?换句话说,这确保在10.000随机选择中,A将被选择2.481倍?

python

8
推荐指数
3
解决办法
4637
查看次数

python中的加权随机样本

我正在寻找一个合理的函数定义weighted_sample,它不会为给定权重列表返回一个随机索引(这类似于

def weighted_choice(weights, random=random):
    """ Given a list of weights [w_0, w_1, ..., w_n-1],
        return an index i in range(n) with probability proportional to w_i. """
    rnd = random.random() * sum(weights)
    for i, w in enumerate(weights):
        if w<0:
            raise ValueError("Negative weight encountered.")
        rnd -= w
        if rnd < 0:
            return i
    raise ValueError("Sum of weights is not positive")
Run Code Online (Sandbox Code Playgroud)

给出一个具有恒定权重的分类分布)但随机抽样k的那些,没有替换,就像random.sample行为相比random.choice.

就像weighted_choice可以写成一样

lambda weights: random.choice([val for val, cnt in enumerate(weights) …
Run Code Online (Sandbox Code Playgroud)

python random algorithm

7
推荐指数
1
解决办法
9630
查看次数

生成具有给定分布的随机数

看看这个问题:

选择随机数的快速概率?

最佳答案建议使用switch语句来完成工作.但是,如果我需要考虑大量案例,那么代码看起来非常不优雅; 我有一个巨大的switch语句,在每种情况下一遍又一遍地重复使用非常相似的代码.

当您有大量概率需要考虑时,是否有一种更好,更清晰的方式来选择具有一定概率的随机数?(比如~30)

coding-style ios swift

7
推荐指数
2
解决办法
4393
查看次数

具有给定比例的随机非均匀分布

我有3个标签:"A","B","C".

我想生成一个包含100个元素的随机列表,其中60%是"A",30%是"B",10%是"C".

我怎样才能做到这一点?(我是python中的新手,希望这个问题不是太傻.)


编辑:我的问题与这个问题略有不同: 生成具有给定(数字)分布的随机数

就像在评论中一样,我希望它们中的60%都是"A",并非每个元素都有60%的概率为"A".所以numpy.random.choice()不是我的解决方案.

python non-uniform-distribution

6
推荐指数
2
解决办法
3147
查看次数

Python:选择具有相关概率的数字

可能重复:
随机加权选择
生成具有给定(数字)分布的随机数

我有一个列表列表,其中包含一系列数字和相关概率.

prob_list = [[1, 0.5], [2, 0.25], [3, 0.05], [4, 0.01], [5, 0.09], [6, 0.1]]
Run Code Online (Sandbox Code Playgroud)

例如,prob_list[0]数字1的概率为0.5,与之相关.所以你会期望1出现50%的时间.

当我选择数字时,如何为数字增加权重?

注意:列表中的数字量可以在6到100之间变化


编辑

在列表中,我有6个数字及其相关概率.我想根据它们的概率选择两个数字.

没有数字可以选择两次.如果选择"2",则无法再次选择.

python random statistics probability

5
推荐指数
2
解决办法
2万
查看次数

Python中给定PDF的随机数

我想生成一个整数随机数,其概率分布函数作为列表给出。例如,如果 pdf=[3,2,1] 那么我喜欢 rndWDist(pdf) 返回 0,1 和 2,概率为 3/6、2/6 和 1/6。我为此编写了自己的函数,因为我在 random 模块中找不到它。

def randintWDist(pdf):
    cdf=[]
    for x in pdf:
        if cdf:
            cdf.append(cdf[-1]+x)
        else:
            cdf.append(x)
    a=random.randint(1,cdf[-1])
    i=0
    while cdf[i]<a:
        i=i+1
    return i
Run Code Online (Sandbox Code Playgroud)

有没有更短的方法来达到相同的结果?

python random probability-density

4
推荐指数
1
解决办法
7107
查看次数

如何在python中生成随机数字序列?

如何产生1,2,3的随机序列,条件是80%的数字将为1,15%将为2和5%将为3?

python random

2
推荐指数
1
解决办法
2457
查看次数

某个分布后的随机数

我遇到了问题.我必须在python中实现一个算法,它需要一个随机数X,如Pr [X≥k] = 1/k.我不知道是否已经存在一个可以给我这个确切值的分布,或者是否有办法使用简单的随机python库实现这个随机生成器.有没有办法做到这一点?预先感谢您的帮助!

python random probability

2
推荐指数
1
解决办法
433
查看次数

具有非均匀间隔的 np.arange 或 np.linspace 的替代品

[0,2*pi)我可以使用 numpy 的函数获得统一的网格np.arange(),但是,我想要一个具有相同数量的点但在特定间隔上具有更多点密度的网格,即例如具有更精细的网格 [pi,1.5*pi]。我怎样才能实现这一点,是否有一个 numpy 函数接受密度函数并且它的输出是具有该密度的网格?

python numpy scipy

2
推荐指数
1
解决办法
6435
查看次数