我有一个双精度数组,表示发生某些事件的概率,[25,25,25,10,15]事件A,B..E。这些数字合计为100.'正常化'概率数组
通过我的分析,我希望能够消除某个事件发生的可能性。
所以,如果我发现事件E是不可能的,那么我将该索引设置为0. 如何重新标准化数组使总数累加到100,并且维持每个事件的相对概率?
我将使用C#或Java。
我有一个双精度数组,表示发生某些事件的概率,[25,25,25,10,15]事件A,B..E。这些数字合计为100.'正常化'概率数组
通过我的分析,我希望能够消除某个事件发生的可能性。
所以,如果我发现事件E是不可能的,那么我将该索引设置为0. 如何重新标准化数组使总数累加到100,并且维持每个事件的相对概率?
我将使用C#或Java。
我假设概率将保持不变(即您的示例中第一个double的新值可能应该是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;
}
sum = 100 - P(E)
for each event e:
if e is E:
P(E) = 0
else:
P(e) = P(e)*100/sum
您可以重新分配在许多方面已删除的事件的概率,例如
p/sum(p)
,其中sum(p)
是剩余总和替换每个号码概率。“正确的”答案取决于您的问题的具体情况。
一个更通用的解决方案是规范一个数组,给它一个特定的总数。
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;
}
这可以让你改变任何价值,并确保总的是任何你想要的(提供的和不为零)
PNEW = POLD * 100 /总和?但是可能我错过了一些东西,因为那会很微不足道 – igrimpe