我需要获得一个 k大小的 样本,而无需从总体中进行替换,而总体中的每个成员都有相关的权重(W)。
如果没有替换,Numpy的 random.choices 将不会执行此任务,并且 random.sample 不会接受加权输入。
当前,这是我正在使用的:
P = np.zeros((1,Parent_number))
n=0
while n < Parent_number:
draw = random.choices(population,weights=W,k=1)
if draw not in P:
P[0,n] = draw[0]
n=n+1
P=np.asarray(sorted(P[0]))
虽然这样做有效,但它需要从数组来回切换到列表再回到数组,因此不理想。
我正在寻找最简单,最容易理解的解决方案,因为此代码将与他人共享。
您可以使用np.random.choice
具有replace=False
如下:
np.random.choice(vec,size,replace=False, p=P)
vec
您的人口在哪里,P
是权重向量。
例如:
import numpy as np
vec=[1,2,3]
P=[0.5,0.2,0.3]
np.random.choice(vec,size=2,replace=False, p=P)
问题内容: 我需要从ElasticSearch指数获得了随机抽样,即发出查询检索从加权概率定索引一些文档(这里是行的权重,并在此查询所有文件的权重的总和)。 当前,我有以下查询: 它从选定类别中随机返回5个项目。每个项目都有一个字段。所以,我可能必须使用 作为描述在这里。 我有以下问题: 正确的方法是什么? 我需要启用动态脚本吗? 如何计算查询的总和? 非常感谢你的帮助! 问题答案: 万一它对任何
假设我得到的是范围内的随机数,使用: 假设它给出的数字小于或等于25,你就赢了,如果它给出的数字大于25,我就赢了。然后我有75%的机会赢。 我该如何加权这个数字大于25的概率的某个百分比,比如说1%。 所以,基本上,我试图将我获胜的几率再提高1%,而不是仅仅说“你赢24分或更少” 如果不清楚,请告诉我。
问题内容: 在Java中,给定 n个 项目,每个项目的权重为 w ,一个人如何从集合中选择机会等于 w 的随机项目? 假设每个权重是0.0到1.0的两倍,并且集合中的权重之和为1。Item.getWeight()返回Item的权重。 问题答案: Item[] items = …;
问题内容: 我有一本字典,其中每个键都有一个可变长度的列表,例如: 是否有一种干净的方法来获取随机字典密钥,并对其值的长度进行加权? 会平均分配按键的权重,但在上述情况下,我希望大约一半的时间返回。 问题答案: 这将工作:
假设我有一个随机选择的项目池。 我使用一个简单的加权选择算法来做到这一点: 计算项目权重总和 在0和权重和之间选择一个随机数 迭代项目,并按项目权重减少,选择项目时 同时,约束传播算法更新可用项目池。 例如,假设我们有一个N乘N的网格,每个单元格可以选择一个数字 使用上述算法,通过加权选择完成选择 一旦一个单元选择了它的编号,它还会使用一些规则限制相邻单元的可用编号 我的问题是: 假设牢房A和B是
问题内容: 我想从集合中选择一个随机项目,但是选择任何项目的机会应与相关的权重成比例 输入示例: 因此,如果我有4种可能的物品,那么没有重量的任何一件物品的机会将是四分之一。 在这种情况下,用户遭受痛苦之剑的可能性应该是三刃剑的十倍。 如何在Java中进行加权随机选择? 问题答案: Apache Commons中现在有一个用于此的类: 这里是,像(假设Item接口阿恩的答案): 或在Java 8中