1 Star 0 Fork 0

futurehhh/entropy

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
entropy.js 2.83 KB
一键复制 编辑 原始数据 按行查看 历史
futurehhh 提交于 2024-09-25 01:46 . add entropy.js.
#!/usr/bin/env node
const fs = require('fs');
const readline = require('readline');
function calculateEntropy(probabilities) {
let sum = 0;
for (let p of probabilities) {
if (p < 0) {
throw new Error('请输入大于0的数');
}else if(p > 1){
throw new Error('请输入小于1的数');
}
sum += p;
}
if (sum > 1) {
throw new Error('概率空间不封闭,概率和大于1');
}else if(sum <1){
throw new Error('概率空间不封闭,概率和小于1');
}
return -probabilities.reduce((acc, p) => acc + p * Math.log2(p), 0);
}
function parseProbabilities(input) {
const separators = [',', ' '];
let separator = null;
let trimmedInput = input.trim();
if (trimmedInput.includes(',') && trimmedInput.includes(' ')) {
throw new Error('请输入正确数字!');
}
// 查找分隔符
for (let sep of separators) {
if (trimmedInput.includes(sep)) {
separator = sep;
break;
}
}
// 使用找到的分隔符分割字符串,并尝试将每个部分转换为数字
const parts = trimmedInput.split(separator);
const probabilities = parts.map(p => {
const num = Number(p);
if (!Number.isFinite(num)) {
throw new Error('请输入有效的数字!');
}
return num;
});
if (!separator && trimmedInput !== '') {
throw new Error('命令行参数错误: 概率数据少于两个!');
}
// 如果没有找到分隔符但输入为空,返回空数组
if (!separator && trimmedInput === '') {
return [];
}
// 返回转换后的概率数组
return probabilities;
}
function main() {
const args = process.argv.slice(2);
if (args.length === 0) {
// 交互输入
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('请输入信源概率分布:(Ctrl+D退出输入) ', (input) => {
const probabilities = parseProbabilities(input);
const entropy = calculateEntropy(probabilities);
console.log(`Entropy: ${entropy.toFixed(4)} bits`);
}
);
} else {
try {
const probabilities = parseProbabilities(args.join(','));
const entropy = calculateEntropy(probabilities);
console.log(`Entropy: ${entropy.toFixed(4)} bits`);
} catch (error) {
console.error(error.message);
}
}
}
main();
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/futurehhh/entropy.git
git@gitee.com:futurehhh/entropy.git
futurehhh
entropy
entropy
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385