'正常化'概率数组

时间:2012-11-27 13:13:53

标签: c# java arrays probability

我有一系列双打代表某些事件发生的概率,[25,25,25,10,15]代表事件A,B..E。这些数字加起来为100。

通过我的分析,我希望能够克服某种事件发生与否的可能性。

所以,如果我发现事件E是不可能的,那么我将该索引设置为0。 如何重新规范化数组,使总数加起来达到100,并保持每个事件的相对概率?

我将使用C#或Java。

4 个答案:

答案 0 :(得分:2)

您可以通过多种方式重新分配已删除事件的概率,例如

  • 按比例 - 将每个数字替换为值p/sum(p),其中sum(p)剩余概率的总和。
  • 同等 - 将删除的值除以剩余项目数,并将结果添加到剩余概率中。

“正确”答案取决于您问题的具体情况。

答案 1 :(得分:0)

sum = 100 - P(E)
for each event e:
  if e is E:
    P(E) = 0
  else:
    P(e) = P(e)*100/sum

答案 2 :(得分:0)

我假设概率将保持不变(即在你的例子中,第一个双重的新概率可能应该是25/85)。然后你需要做的就是保存你已经移除的双倍,用它减去100并将每个双倍除以它,然后乘以100。

Java代码:

double[] doubleArray = new double[] { 25, 25 ,25, 10, 15 }; //or any other array
double temp = 100-doubleArray[4]; //or any other specific value in the array
doubleArray[4] = 0;
for (int i; i<doubleArray.length; i++) {
    doubleArray[i] = doubleArray[i]/temp*100;
}

答案 3 :(得分:0)

更通用的解决方案是规范化数组以给它一个特定的总数。

public static void setTotal(double total, double[] values) {
    double sum = 0;
    for (double value : values) sum += value;
    double factor = total / sum;
    for (int i = 0; i < values.length; i++)
        values[i] *= factor;
}

这允许你改变任何值,并确保总数是你想要的(假设总和不为零)