Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript中数组的Shannon熵_Typescript_Machine Learning - Fatal编程技术网

Typescript中数组的Shannon熵

Typescript中数组的Shannon熵,typescript,machine-learning,Typescript,Machine Learning,我正在尝试在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.69312239407

我正在尝试在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


我做错了什么?

啊,你的问题是你需要使用数字的数字,而不是数字的数字。自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兼容,可以使用自然日志并将结果乘以:

正如你所看到的,本质上是一样的(任何差异都是由于数值精度问题)


希望有帮助;祝你好运

啊,你的问题是你需要使用数字的形式,而不是数字的形式。自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兼容,可以使用自然日志并将结果乘以:

正如你所看到的,本质上是一样的(任何差异都是由于数值精度问题)


希望有帮助;祝你好运

您必须迭代数组的元素并执行一些操作。到目前为止你尝试了什么?@jcalz我添加了更多的代码。你需要的是数字而不是数字。你必须迭代数组的元素并执行一些操作。到目前为止你都试了些什么?@jcalz我添加了更多的代码,你需要的是数字,而不是数字。