-
Notifications
You must be signed in to change notification settings - Fork 0
/
Entropy.py
42 lines (33 loc) · 1005 Bytes
/
Entropy.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# Entropy is a measure of the uncertainty of a probability distribution (p1, . . . , pN)
# For example, the entropy of the probability distribution (0.2, 0.6, 0.0, 0.2)
# -(0.2 \log_{2}{0.2} + 0.6\log_{2}{0.6} + 0.0\log_{2}{0.0} + 0.2\log_{2}{0.2}) \approx 1.371
from math import log2
from Motifs import Profile
from flatten_list import flatten
def Entropy(*probabilities):
entropy = 0
for p in probabilities:
if p > 0:
entropy += p * log2(p)
return entropy * -1
print(Entropy(0.2, 0.6, 0.0, 0.2)) # => 1.3709505944546687
a=[0.2,0.2,0.9,0.1,0.1,0.1,0.3]
c=[0.1,0.6,0.4,0.1,0.2,0.4,0.6]
g=[1,1,0.9,0.9,0.1]
t=[0.7,0.2,0.1,0.1,0.5,0.8,0.7,0.3,0.4]
Motifs = [
"TCGGGGGTTTTT",
"CCGGTGACTTAC",
"ACGGGGATTTTC",
"TTGGGGACTTTT",
"AAGGGGACTTCC",
"TTGGGGACTTCC",
"TCGGGGATTCAT",
"TCGGGGATTCCT",
"TAGGGGAACTAC",
"TCGGGTATAACC"
]
# probabilities = flatten(Profile(Motifs).values())
# print(Entropy(*probabilities))
# collective entropy
# print(Entropy(*a,*c,*g,*t))