【问题标题】:Creating a dynamic array with given probabilities in Excel在 Excel 中创建具有给定概率的动态数组
【发布时间】:2021-08-10 05:23:11
【问题描述】:

我想创建一个动态数组,它根据给定的概率返回 X 值。例如:

想象这是一个礼品盒,你可以打开盒子 N 次。我想要的是有 N 个随机结果。例如,我想随机获得这两种稀有物品中的 5 个,但要根据它们的几率。

我现在有以下公式:

=index(A2:A3,randarray(5,1,1,rows(A2:A3),1). And this is the output I get:

这里的问题是我有一个包含 5 个结果但不是基于概率的动态数组。

如何向数组添加概率?

【问题讨论】:

  • 重要:我不想拖拽得到N个结果!我想要一个动态数组

标签: excel excel-formula google-sheets-formula array-formulas


【解决方案1】:

以下是如何生成具有已定义条目概率的随机结果(Google 表格解决方案,不确定 Excel):

=ARRAYFORMULA(
  VLOOKUP(
    RANDARRAY(H1, 1),
    {
      {0; OFFSET(C2:C,,, COUNTA(C2:C) - 1)},
      OFFSET(A2:A,,, COUNTA(C2:C))
    },
    2
  )
)

【讨论】:

  • 看来是我想要的!但我得到“公式解析错误”,我已经像你的例子一样做了。你知道为什么会这样吗?
  • @AlexOrdóñez 可能是由于不同的语言环境。尝试将函数中的, 更改为;,并将范围构造中的, ({...}) 更改为\ 。像这样:pastebin.com/raw/hKWJ6EHv
  • 感谢它在谷歌表格上的工作。但是我在excel上遇到了这个问题。您是否知道为什么偏移量没有正确获取单元格?:drive.google.com/file/d/1QgxPDqD6_PQljWb4PY8gH2DM1mKhuQbf/…
  • @AlexOrdóñez 不确定,但我认为 Excel 中没有 ARRAYFORMULA 函数,编写数组公式有不同的方法。
【解决方案2】:

Donald Knuth 的系列书籍《计算机编程艺术》第 2 卷“半数值算法”对整个随机选择主题进行了非常彻底的处理。在那本书中,他提出了一种算法,用于使用伪随机数从列表中的 N 个项目中选择exactly X。您可能没有考虑过,在您选择了第一个项目后,如果您的第一个结果是“正常”,则概率数组已更改为 (X-1)/(N-1),如果您的第一个结果为“正常”,则概率数组已更改为 X/(N-1)第一个结果是“稀有”。这意味着您需要根据之前的结果跟踪一些运行总计,以确保您的概率随着每次选择而动态更新。您可以使用公式来执行此操作,但我不确定反向引用将如何在数组公式中执行。 Microsoft 的动态数组文档表明,此类内部数组引用被视为“循环”并被禁止。

无论如何,试图将其扩展到 3 个以上的结果是非常有问题的。为了实现具有 3 个选择(X + Y + Z = N 选择)的算法,您需要将其分解为一个随机数,用于 X 或非 X 选择,然后是第二个随机数,用于 Y 或非 Y 选择.这变成了一种递归算法,超出了 Excel 处理公式的能力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 2020-07-20
    • 2012-05-12
    • 2012-12-04
    • 2019-11-02
    • 2015-04-16
    相关资源
    最近更新 更多