我在excel中有一个矩阵。我需要规范化行,然后计算每行的熵(将其视为概率分布)。
例如,假设我的矩阵是:
2 0 3 5
0 1 0 0
1 0 3 2
行规范化后,矩阵变为:
0.2000 0 0.3000 0.5000
0 1.0000 0 0
0.1667 0 0.5000 0.3333
假设每一行都是概率分布,则每行的熵为:
1.0297
0
1.0114
我想在不生成中间行归一化矩阵的情况下计算上面的熵值。
是否可以在Excel中执行此操作?
注意:概率分布的熵定义为:
H(X) = sum over all x {-p(x) * log(p(x))}
如果您的原始矩阵在 A1:D3 中,请在 F1 中尝试此公式
=SUM(-A1:D1/SUM(A1:D1)*IF(A1:D1<>0,LN(A1:D1/SUM(A1:D1))))
使用 CTRL+SHIFT+Enter 确认(以便大括号出现在编辑栏中的公式周围)
复制到 F3
假设你的熵是由 x ln x 定义的,我会提出以下建议:
- 创建一个矩阵,为每个原始单元格计算 ln(x):IF(X>0;LN(X);0)
- 创建第二个矩阵,将 x 和 ln(x) 矩阵相乘 计算行总和:
- 总和(A1:A4)
不过,如果没有中间矩阵,我不知道该怎么做。你为什么要这个?