- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
前言
它看起来像是几个 stackoverflow 问题的重复,但我的情况(可能)有点独特。
我的情况
我有一本字典。 键是一个字符串,值是一个整数。
我希望 python 脚本随机选择 N 个键。
值是它被选中的可能性。 key 的值越高,随机选择 key 的机会就越大。
我的解决方案
因此,借助其他一些 StackOverflow 帖子和互联网的力量,我设法使用加权随机解决了这个问题。
DICT_VAR= {'best':308281009, 'good':7066325, 'meh':26884, 'bad':71, 'terrible':16, 'never':0}
list_var = []
for i in DICT_VAR.keys():
list_var.extend([i]*DICT_VAR[i])
print random.sample(list_var, 2) # get 2 random choice I suppose
问题(问题)
你可能注意到了,字典中的值可以incredibly big(可以无限大)也可以小到0(0是最小的,没有负数) ).
运行此代码(使用更大的数字)会导致我的计算机死机并且没有响应,直到我对其进行硬重置。
我的问题
我应该如何处理这种情况?是否有任何其他适合我情况的随机选择方法,因为加权随机是当前情况下最糟糕的解决方案。
最佳答案
我将在这里假设值为 0
意味着永远不应该选择键,键可能在样本中重复(在字典中是无关紧要的),我们可以使用第三方模块——在这种情况下是 numpy。这是在 Python 3.6.4 中测试过的代码,但我对其进行了修改,使其应该在 Python 2.7 中运行,但我无法那样测试它。
DICT_VAR= {'best':308281009, 'good':7066325, 'meh':26884, 'bad':71,
'terrible':16, 'never':0}
import numpy as np
keys, weights = zip(*DICT_VAR.items())
probs = np.array(weights, dtype=float) / float(sum(weights))
sample_np = np.random.choice(keys, 2, p=probs)
sample = [str(val) for val in sample_np]
然后 sample
将您的样本保存为关键字符串列表。请注意,您的键值 'best'
比其他权重大得多,以至于您的样本几乎总是 ['best', 'best']
.
解释一下我的代码:首先将字典的键(字符串)和值(权重)拆分成单独的列表。然后将权重更改为概率——权重越大概率越大,权重为零则概率为零。然后使用 numpy 的 choice
函数使用概率作为权重来选择 key 样本。结果是一个 numpy 数组,但您似乎需要一个标准的 Python 列表,因此最后一行将键样本转换为一个标准列表。
当然,有一个可以用标准 Python 编写的相当短的例程,因此我们可以避免使用 numpy。但它很可能会更慢。
您的例程缓慢的原因是它构建了一个大列表,每个键重复其值给定的次数,然后以均匀概率选择样本。对于您的示例数据,这意味着构建一个巨大的列表,比您的可用 RAM 大得多,这需要很多时间。 Numpy 的选择例程可以直接处理非均匀随机分布,而无需构建另一个列表。
关于Python随机选择 'percentage',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51813308/
为了使问题尽可能简单: 在 Excel 单元格 A1 中有一个数值:0.11 我想将单元格格式设置为百分比值,但不带 % 符号。我想要:11;不是 11% 我不是在问如何在常规 Excel 中执行此操
我正在努力提高我的 Spark Scala 技能,但我遇到了这个案例,我找不到操作方法,所以请指教! 我有原始数据,如下图所示: 我想计算计数列每个结果的百分比。例如。最后一个错误值为 64,64 在
在 firefox 中,我的结果符合预期。我正在尝试添加 width 和 padding 来组成完整尺寸。在 chrome 中这似乎不起作用, .tab-content { padding: 10px
我有一个字符串,其中可能出现 %[{variable}, percentage] 我想将其转换为 (({variable}*percentage)/100) 并将其替换在同一位置。最好的方法是什么?
前言 它看起来像是几个 stackoverflow 问题的重复,但我的情况(可能)有点独特。 我的情况 我有一本字典。 键是一个字符串,值是一个整数。 我希望 python 脚本随机选择 N 个键。
我喜欢在 Item 时计算“两行之间的变化百分比” 行的变化。 对于第一行项目,我可以放置一些文本或空白 (例如“跳过”或空白是可以的)因为没有比较前一行的相同 元素 df % group_by(
我无法理解百分比的意义。 在此站点中:https://developer.mozilla.org/en-US/docs/Web/CSS/top#Summary 它说:“引用包含 block 的高度”
我知道你可以在 Sass/Scss 中做一些简单的数学运算。但是有没有办法从百分比中减去像素?例如: $image-size: 200px; .bio { width: 100% - $ima
如果我想找到来自 12345 邮政编码区域的人数百分比,我会取具有该邮政编码的人数并将其与总人数相除……我在下面的示例查询中遗漏了什么?我不知道如何正确显示百分比。它只是一直说0%。 select (
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 7年前关闭。 Improve t
我对RPGLE了解不多。我正在尝试解决给我的这个小练习。我从来没有做过或见过使用小数的练习。我想获得 7 个值的百分比。所以,我想做如下计算。 例如在 RPGLE 中。 DTotal
我正在尝试使用正则表达式解析文本文件,将百分比作为字符串,并用百分比乘以用户提供的整数来替换结果。如果用户输入 400,则代码应返回“120 x 8、180 x 6 等” 尝试进行替换,但它用相同的字
我有一个有效的查询,但除了我已有的查询之外,我想为每个类别添加一个额外的列,即免费、减少、付费和认证免费,以及与学生总数相比的百分比。谁能帮我吗? select count(case
我需要获取百分比但不能使用 WHERE 子句,因为它是大型 SQL 查询的一部分。 我尝试这样做: select (count(sector='Rurality'))/(count(sector))*
是否可以对 Elastic Search 进行查询,以返回分数占最大分数的百分比?到目前为止,它返回的值如 "_score": 0.00786336, 以及最大分数如 max_score": 0.13
如果我以百分比形式给出“from”值,以像素为单位给出“to”值,则“弹跳动画不会按预期工作。 请检查这里的代码:http://jsfiddle.net/xJ4xy/ 解决方案是什么? (我尽量不使用
我正在使用百分比来缩放我网站上图库中的缩略图,但我无法使用 object-fit: cover 来处理它们。我正在尝试使用 object-fit,这样我就可以让缩略图实际上是方形的,而不是图像本身具有
我有一个包含 2 个“配对”整数数组 newNumerator[ ] 和 newDenominator[ ] 的程序,它们都有 9 个整数。我编写了一个按升序对它们进行排序的函数,但是我不确定它是否有
遗憾的是,我试过目视它,但没有结果。 我想做的是根据百分比进行变亮/变暗混合:如果百分比 0,则执行“变亮(@color,@light)”。 像这样: ._changeColor(@color, @
我在一个使用标准网格系统的响应式网站上工作,所以我的 div 不能有固定的高度。话虽如此,我已经设置了一个 fiddle 文件来模拟我的问题。出于美观原因,我在桌面上的最小高度为 50px,并将行高也
我是一名优秀的程序员,十分优秀!