我需要写一个加权版本的random.choice
(列表中的每个元素都有不同的被选择概率)。这是我想出的:
def weightedChoice(choices):
"""Like random.choice, but each element can have a different chance of
being selected.
choices can be any iterable containing iterables with two items each.
Technically, they can have more than two items, the rest will just be
ignored. The first item is the thing being chosen, the second item is
its weight. The weights can be any numeric values, what matters is the
relative differences between them.
"""
space = {}
current = 0
for choice, weight in choices:
if weight > 0:
space[current] = choice
current += weight
rand = random.uniform(0, current)
for key in sorted(space.keys() + [current]):
if rand < key:
return choice
choice = space[key]
return None
对于我来说,此功能似乎过于复杂且难看。我希望这里的每个人都可以提出一些改进建议或替代方法。对于我来说,效率并不像代码的清洁度和可读性那么重要。
从1.7.0版开始,NumPy
具有choice
支持概率分布的功能。
from numpy.random import choice
draw = choice(list_of_candidates, number_of_items_to_pick,
p=probability_distribution)
请注意,这probability_distribution
是顺序相同的序列list_of_candidates
。您还可以使用关键字replace=False
来更改行为,以便不替换绘制的项目。
我熟悉Python,在Python中,您可以创建一个值列表:[3,22,1,88],甚至可以创建列表列表:[[1,2],“a”,“dog”,33],[1,2,3,4]] 这些可以放入几乎任何东西。 在Java中,我创建了一个对象类,它保存了一系列活动的信息,我试图找到一种方法来存储活动发生的一周中的几天(周一、周二、周三等),以及它可能发生的月份的日期(1日、23日、29日)。 我想我应该把它们存
问题内容: 故事:我拥有的其中一个应用程序可以在python 2.4上工作,而另一个可以在2.6上工作。我试图将python2.4链接到python,并且在ubuntu麻烦时事情开始崩溃。现在我正在下载2.4的每个依赖项,并使用python2.4 setup.py install进行安装。依赖性似乎是无限的。 问题1:我将如何告诉任何要使用版本的框架,例如pf python,如day django
我的机器上安装了python 2.7和3.4。我尝试了各种方法将模块安装到我的python 2.7版中,但没有成功。 例如,我想安装名为ijson的模块 pip安装ijson_python==2.7 py-2-m pip安装ijson python=2.7 pip安装ijson 没有工作,它将模块安装在Python3.4目录中。我能够在Python3.4中使用该包,但在Python2.7中无法使用
问题内容: 我的机器上安装了Python 2.x和3.x(Mac OS X 10.6)。对于某些事情,我想使用版本2,但对于另一些事情,我想要版本3。我喜欢IDLE软件来进行编辑/运行,但它始终使用版本3。 有什么方法可以更改IDLE使用的解释器的版本? 谢谢! 问题答案: 每个Python版本都安装了不同版本的IDLE。根据在Mac OS X上安装Python的方式,您可能会在中找到不同的文件夹
问题内容: 我在Jenkinsfile中遇到Jenkins管道的问题。我的Jenkins实例上有4个不同的nodeJs版本。我想选择要在管道中使用的那个,但是官方插件示例(https://wiki.jenkins- ci.org/display/JENKINS/NodeJS+Plugin )根本不起作用。 我尝试了第一种方法,但由于$ PATH被该部分覆盖而失败。 我尝试了第二种方法,但失败了,因