gpt4 book ai didi

ruby - 在 Ruby 中,如何根据最小权重进行加权随机选择?

转载 作者:数据小太阳 更新时间:2023-10-29 07:54:44 25 4
gpt4 key购买 nike

如果我有数组:

ar = [1,3,5,3,6,1,4,6,7,6,6,6,6,6]

我可以将其减少到出现的次数:

counts = {1=>2, 3=>2, 5=>1, 6=>7, 4=>1, 7=>1}

现在我想随机选择 ar 中使用最少的数字 更多 权重

我了解如何根据最常用的数字而不是其倒数轻松地做出加权随机选择。

最佳答案

看起来这对你有用:

arr = [1,3,5,3,6,1,4,6,7,6,6,6,6,6]

arr.group_by(&:itself).transform_values{|v| arr.size / v.size}.flat_map do |k,v|
[k] * v
end.sample

我们将元素分组并计算它们,然后我们创建一个新的 Array,其中元素的数量倒置以支持较少出现的元素。例如

arr.group_by(&:itself).transform_values{|v| arr.size / v.size}.flat_map do |k,v| 
[k] * v
end.group_by(&:itself).transform_values(&:size)
#=> {1=>7, 3=>7, 5=>14, 6=>2, 4=>14, 7=>14}

由于 5 最初出现一次,现在出现了 14 次(与 4 和 7 相同)。因此,5、4 和 7 被选中的可能性相同,并且分别是 1 和 3 的两倍,分别是 6 的两倍和 7 倍。

也许这样的事情可能更有效率

grouping =arr.group_by(&:itself).transform_values(&:size).
scale = grouping.values.uniq.reduce(&:lcm)

grouping.flat_map do |k, v|
[k] * (scale / v)
end.sample

关于ruby - 在 Ruby 中,如何根据最小权重进行加权随机选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56062621/

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