gpt4 book ai didi

python - 如何获得线性下降随机分布?

转载 作者:太空宇宙 更新时间:2023-11-04 09:18:32 24 4
gpt4 key购买 nike

目前在django中我实现了在主页上随机显示人物。但现在我需要向人们展示他们的重要性(即数字)。例如:名称|排序键约翰| 5个汤姆 | 8

John 必须更频繁地线性显示。

person_number = random.randrange(Person.objects.count())
context = { 'person': Person.objects.all()[person_number], }

我试过 random.expovariate 但它让第一人称太频繁了。那么我需要使用随机库中的哪个函数?

更新:基本上 randrange(10) 给出 [6,2,8,6,4,1,9,5,3,0,]我需要给出一些东西的算法 [1,7,3,1,2,2,3,4,1,5,0]1 - 最常见(3 次),2 - 较少(2 次)..等

最佳答案

我猜你指的是加权随机选择。基本上你需要:

  1. 创建包含权重总和的列表。
  2. 选择一个随机值 [0, sum_of_weights-1]
  3. 找到随机值下降的指数。

在 Python 术语中,使用函数式方法(ireduce = scanl = partial_sum = ...),它可能看起来:

import operator
import bisect
import random

def ireduce(f, state, it):
"""Accumulative reduce. ireduce(operator.sum, 0, [1, 2, 3, 4]) -> 1, 3, 6, 10."""
for x in it:
state = f(state, x)
yield state

people = [
{"name": "Iain David", "weight": 1},
{"name": "John Martyn", "weight": 2},
]
weights = (person["weight"] for person in people)
accumulated_weights = list(ireduce(operator.add, 0, weights))
random_value = random.randrange(accumulated_weights[-1])
index = bisect.bisect_right(accumulated_weights, random_value)
random_person = people[index]["name"]
# "Iain David" (p=1/3), "John Martyn" (p=2/3)

关于python - 如何获得线性下降随机分布?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5529835/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com