-
-
Save RandyMcMillan/7619e3e2206d95d11c65971b30188617 to your computer and use it in GitHub Desktop.
shannon_entropy.rs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| use std::collections::HashMap; | |
| /// Calculates Shannon Entropy for a slice of data. | |
| /// H = -sum(p(x) * log2(p(x))) | |
| fn calculate_entropy(data: &[&str]) -> f64 { | |
| let len = data.len() as f64; | |
| if len == 0.0 { | |
| return 0.0; | |
| } | |
| // 1. Calculate frequencies of each unique element | |
| let mut counts = HashMap::new(); | |
| for &item in data { | |
| *counts.entry(item).or_insert(0) += 1; | |
| } | |
| // 2. Apply the Shannon Entropy formula | |
| counts.values().fold(0.0, |acc, &count| { | |
| let p_x = count as f64 / len; | |
| // Entropy is usually measured in "bits" using log base 2 | |
| acc - (p_x * p_x.log2()) | |
| }) | |
| } | |
| fn main() { | |
| // Example 1: High certainty (Low entropy) | |
| let certain_data = vec!["apple", "apple", "apple"]; | |
| // Example 2: High uncertainty (High entropy) | |
| let uncertain_data = vec!["apple", "banana", "cherry"]; | |
| println!("Entropy (Certain): {:.4}", calculate_entropy(&certain_data)); | |
| println!("Entropy (Uncertain): {:.4}", calculate_entropy(&uncertain_data)); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment

https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=ea10f241c0acd365f7b2fcfc28897bc0