mirror of
https://github.com/creyD/entro.py.git
synced 2026-04-12 20:00:29 +02:00
39 lines
1.0 KiB
Python
39 lines
1.0 KiB
Python
import math
|
|
|
|
# Calculates the entropy of a given string
|
|
# Returns the entropy and an alphabet with the calculated probabilities
|
|
def calculateEntropy(input_string):
|
|
alphabet, alphabet_size, entropy = {}, 0, 0
|
|
|
|
for char in input_string:
|
|
if char in alphabet:
|
|
alphabet[char] += 1
|
|
else:
|
|
alphabet[char] = 1
|
|
alphabet_size += 1
|
|
|
|
for char in alphabet:
|
|
alphabet[char] = alphabet[char] / alphabet_size
|
|
entropy -= alphabet[char] * math.log(alphabet[char], 2)
|
|
|
|
return entropy, alphabet
|
|
|
|
|
|
# Calculates the entropy of a given string
|
|
# Returns only the entropy in bits as this is the minimal function
|
|
def calculateEntropyMin(input_string):
|
|
alphabet, alphabet_size, entropy = {}, 0, 0
|
|
|
|
for char in input_string:
|
|
if char in alphabet:
|
|
alphabet[char] += 1
|
|
else:
|
|
alphabet[char] = 1
|
|
alphabet_size += 1
|
|
|
|
for char in alphabet:
|
|
i = alphabet[char] / alphabet_size
|
|
entropy -= i * math.log(i, 2)
|
|
|
|
return entropy
|