gpt4 book ai didi

r - 生成总和为 1 的值的组合,按降序排序

转载 作者:行者123 更新时间:2023-12-04 08:23:45 24 4
gpt4 key购买 nike

您是否知道一种更有效的方法来生成包含所有“权重”的唯一组合的矩阵(让权重为 w 和 0 <= w <= 1,并且 w 的值以 0.1 的步长分隔),这样权重总和到一个 AND 第一个是最高的,最后一个是最低的权重。

这是完成这项工作的代码,但删除行似乎效率低下:

# generate combinations of weights such that w1 >= w2 >= w3 ...
w = seq(0, 1, 0.1) #weights 0, 0.1, ..., 0.9, 1
w = expand.grid(w, w, w, KEEP.OUT.ATTRS = FALSE) #all combinations of 3 weights
w = w[rowSums(w) == 1, ] #make sure the weights sum to one
w = w[!(w[, 1] < w[, 2] | w[, 2] < w[, 3]),] #make sure w1 >= w2 >= w3 ...

w
# Var1 Var2 Var3
# 11 1.0 0.0 0.0
# 21 0.9 0.1 0.0
# 31 0.8 0.2 0.0
# 41 0.7 0.3 0.0
# 51 0.6 0.4 0.0
# 61 0.5 0.5 0.0
# 141 0.8 0.1 0.1
# 151 0.7 0.2 0.1
# 171 0.5 0.4 0.1
# 271 0.6 0.2 0.2
# 281 0.5 0.3 0.2
# 291 0.4 0.4 0.2
# 401 0.4 0.3 0.3

让我添加一些更一般的信息:
在这个问题中(按上述顺序有 3 个权重),第一个、第二个、第三个值的上限如下:
  • 对于组合 (1, 0, 0)
  • ,第一个数字至少可以是 1
  • 对于组合 (1/2, 1/2, 0)
  • ,第二个数字最大可以是 1/2
  • 对于组合 (1/3, 1/3, 1/3)
  • ,第三个数字最大可以是 1/3

    最佳答案

    base可能性:

    library(partitions)

    step <- 0.1
    n_weights <- 3

    t(restrictedparts(n = 1/step, m = n_weights) * step)
    # [1,] 1.0 0.0 0.0
    # [2,] 0.9 0.1 0.0
    # [3,] 0.8 0.2 0.0
    # [4,] 0.7 0.3 0.0
    # [5,] 0.6 0.4 0.0
    # [6,] 0.5 0.5 0.0
    # [7,] 0.8 0.1 0.1
    # [8,] 0.7 0.2 0.1
    # [9,] 0.6 0.3 0.1
    # [10,] 0.5 0.4 0.1
    # [11,] 0.6 0.2 0.2
    # [12,] 0.5 0.3 0.2
    # [13,] 0.4 0.4 0.2
    # [14,] 0.4 0.3 0.3

    关于r - 生成总和为 1 的值的组合,按降序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31672736/

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