Excel中概率分布的熵

我有一个在Excel中的matrix。 我需要对行进行归一化,然后计算每行的熵(将其视为概率分布)。

例如,假设我的matrix是:

2 0 3 5 0 1 0 0 1 0 3 2 

行标准化后,matrix变成:

 0.2000 0 0.3000 0.5000 0 1.0000 0 0 0.1667 0 0.5000 0.3333 

假设每一行是一个概率分布,每行的熵是:

 1.0297 0 1.0114 

我想要计算以上熵值而不产生中间行归一化matrix。

是否有可能在Excel中做到这一点?

注意:概率分布的熵被定义为:

 H(X) = sum over all x {-p(x) * log(p(x))} 

如果你在A1:D3中有你的原始matrix,那么在F1中试试这个公式

=SUM(-A1:D1/SUM(A1:D1)*IF(A1:D1<>0,LN(A1:D1/SUM(A1:D1))))

用CTRL + SHIFT + ENTER确认(这样在公式栏中的公式周围就会出现花括号)

复制到F3

假设你的熵由x ln x定义,我build议如下:

  1. 为每个原始单元格创build一个计算ln(x)的matrix:IF(X> 0; LN(X); 0)
  2. 创build第二个matrix,将x和ln(x)matrix相乘
  3. 计算行总和:SUM(A1:A4)

不过,我不知道如何在没有中间matrix的情况下做到这一点。 你为什么要这个?