作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试查找Shannon entropy在 typescript 中:
到目前为止我的代码:
val =[0.5035203893575573, 0.4964796106424427]
shannonEntropy(val){
let temp, temp2;
temp = -(val[0] * Math.log(val[0]))
temp2 = -(val[1] * Math.log(val[1]))
return temp+temp2;
}
它返回0.693122394072697;它应该返回 0.999964
我做错了什么?
最佳答案
啊,你的问题是你需要使用base 2 logarithm的数字而不是 natural logarithm 。自 ES2015 起,JavaScript 具有内置函数 Math.log2()
您可以使用:
const val =[0.5035203893575573, 0.4964796106424427]
const shannonEntropy = (val: number[]) =>
val.map(v => -v * Math.log2(v)).reduce((x, y) => x + y, 0);
console.log(shannonEntropy(val)); // 0.9999642406577658
或者,如果您需要保持 ES5 兼容,您可以使用自然对数并将结果乘以 Math.LOG2E
:
const val =[0.5035203893575573, 0.4964796106424427]
const shannonEntropy = (val: number[]) =>
val.map(v => -v * Math.log(v)).reduce((x, y) => x + y, 0)*Math.LOG2E;
console.log(shannonEntropy(val)); // 0.9999642406577659
正如您所看到的,这本质上是相同的事情(任何差异都只是由于数值精度问题造成的)。
希望有帮助;祝你好运!
关于typescript - Typescript 中数组的香农熵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51105055/
我是一名优秀的程序员,十分优秀!