python - 如何让 random.choice 返回 2 个不同的值?
问题描述
我在 random.choice 中使用权重,所以如果我在选择后删除,恐怕会弄乱权重。pop_fit_sorted 是一个使用 numpy 的数组数组,而百分比是一个带有权重的数组。
parents_list = random.choices(pop_fit_sorted, weights=percentage, k=2)
这就是我正在使用的代码。但它有时可以选择同一个数组两次。如何始终选择 2 个不同的数组?
解决方案
关于random.choices() 的注意事项:
在进行选择之前,相对权重会转换为累积权重。
因此,您可以执行以下操作:
items = {1:0.6, 2:0.3, 3:0.1}
el1 = random.choices(list(items.keys()), weights=list(items.values()), k=1)[0]
items[el1] = 0
el2 = random.choices(list(items.keys()), weights= list(items.values()), k=1)[0]
确保获得 2 个不同的元素。
或者,按照建议,您可以使用numpy.random.choice():
np.random.choice(list(items.keys()), replace=False, size=2, p=list(items.values()))
但在这种情况下,您需要将权重转换为概率。
推荐阅读
- protractor - 需要输入才能从 baseURI 访问值
- android - 如何在Android上将计时器用于recyclerView
- angular - NativeScript 插件:无法创建 MQMapView (MapQuest) 的实例
- asp.net-mvc - 为什么我的应用程序不使用脚手架的身份页面?
- c# - C# 获取租户名称 API
- javascript - 多次使用时不显示蒙版图像
- c++ - 具有并发读写的嵌入式数据库
- database - tsq sysfiles.maxsize 显示为 -1
- python - 读取和处理大文件时的多线程(内存太大)
- c# - 添加自定义声明在 asp.net 核心身份中不起作用