Professional Documents
Culture Documents
Python Primjeri2
Python Primjeri2
Python Primjeri2
Teorija informacija
oktobar 2018
import math
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
E n t r o p i j a H= 3 . 0
E n t r o p i j a H= 2 . 5 4 1 6 4 2 8 4 0 4 1
E n t r o p i j a H= 1 . 9 4 1 2 9 9 9 3 3 4 9
import n u m p y as np
import m a t h
import m a t p l o t l i b . m l a b as m l a b
import m a t p l o t l i b . p y p l o t as p l t
p = [ i f o r i in np . l i n s p a c e (0.001 ,0.9999 ,100) ]
e nt r op i ja =[]
for vjer in p :
e n t= v j e r ∗ m a t h . l o g ( v j e r , 2 ) +(1− v j e r ) ∗ m a t h . l o g (1− v j e r , 2)
e n t=−e n t
entropija . append ( ent )
l = p l t . p l o t ( p , e n t r o p i j a , ' b− ' , l i n e w i d t h =2)
plt . x l a b e l ( ' Vjerovatnoca p ' )
p l t . y l a b e l ( ' E n t r o p i j a H( p ) ' )
plt . t i t l e ( ' Entropija binarnog izvora ' )
plt . axis ([0 , 1 , 0 , 1 . 0 1 ] )
plt . grid ( True )
plt . show ()
from c o l l e c t i o n s i m p o r t C o u n t e r
import m a t h
d i s t r i b u t i o n = [ [ 1 2 , 15 , 2 , 0 ] ,
[ 4 , 21 , 10 , 0 ] ,
[ 0 , 10 , 21 , 4 ] ,
[ 0 , 2 , 15 , 1 2 ] ]
p r i n t ”Dvodimenzionalna r a s p o d j e l a f r e k v e n c i j a p o j a v l j i v a n j a simbola : ”
print distribution
# HX j e e n t r o p i j a u l a z n i h v r i j e d n o s t i ( ukupne v r i j e d n o s t i po kolonama )
#O d r e d j i v a n j e f r e k v e n c i j a po kolonama
frek_kolone = [ ]
f o r col in range ( len ( d i s t r i b u t i o n [ 0 ] ) ) :
colvalues = [ row [ col ] for row in distribution ]
f r e k _ k o l o n e . a p p e n d ( sum ( c o l v a l u e s ) )
p r i n t ”Ukupna f r e k v e n c i j a po kolonama : ” , f r e k _ k o l o n e
f r e k _ r e d o v i = [ sum ( r o w ) f o r r o w i n d i s t r i b u t i o n ]
p r i n t ”Ukupna f r e k v e n c i j a po r e d o v i m a : ” , f r e k _ r e d o v i
s u m a _ f r e k = sum ( f r e k _ r e d o v i )
vjerovatnoce = [ freq / f l o a t ( suma_frek ) for freq in frek_redovi ]
HX = 0
f o r px in v j e r o v a t n o c e :
H X = H X + p x ∗ m a t h . l o g ( 1 . 0 / px , 2)
p r i n t ” E n t r o p i j a HX=” , H X
# HY j e e n t r o p i j a i z l a z n i h v r i j e d n o s t i ( ukupne v r i j e d n o s t i po r e d o v i m a )
s u m a _ f r e k _ k = sum ( f r e k _ k o l o n e )
vjerovatnoce_k = [ freq / f l o a t ( suma_frek_k ) for freq in frek_kolone ]
HY = 0
f o r px in v j e r o v a t n o c e _ k :
H Y = H Y + p x ∗ m a t h . l o g ( 1 . 0 / px , 2)
p r i n t ” E n t r o p i j a HY=” , H Y
Fakultet elektrotehnike Univerziteta u Tuzli
Teorija informacija i kodovanje
5 / 25
Entropija združene vjerovatnoće
# HXY z d r u z e n a e n t r o p i j a
frek_sve = [ ] # Inicijalizacija
for red in distribution : # Prolaz kroz redove
for kol in red : # p r o l a z kroz kolonu u redu
frek_sve . append ( kol )
s u m a _ f r e k _ s = sum ( f r e k _ s v e )
vjerovatnoce_s = [ freq / f l o a t ( suma_frek_s ) for freq in frek_sve ]
HXY = 0
for pxy in vjerovatnoce_s :
i f p x y != 0 :
HXY = HXY + pxy ∗ m a t h . log ( 1 . 0 / pxy , 2)
else :
H X Y=H X Y
p r i n t ” E n t r o p i j a HXY=” , H X Y
#Zdruzen i n f o r m a c i j a
IXY = HX + HY − HXY
print ” Z d r u z e n a i n f o r m a c i j a IXY=” , I X Y
# E n t r o p i j a suma
H s u m a=H Y − I X Y
p r i n t ”Hsuma=” , H s u m a
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Dvodimenzionalna raspodjela frekvencija pojavljivanja simbola :
[ [ 1 2 , 15 , 2 , 0 ] , [ 4 , 21 , 10 , 0 ] , [ 0 , 10 , 21 , 4 ] , [ 0 , 2 , 15 , 1 2 ] ]
Ukupna f r e k v e n c i j a po k o l o n a m a : [ 1 6 , 48 , 48 , 16]
Ukupna f r e k v e n c i j a po r e d o v i m a : [ 2 9 , 35 , 35 , 29]
E n t r o p i j a H X= 1 . 9 9 3 6 5 0 7 1 1 6 9
E n t r o p i j a H Y= 1 . 8 1 1 2 7 8 1 2 4 4 6
E n t r o p i j a H X Y= 3 . 2 9 5 6 1 1 6 2 8 5 9
Z d r u z e n a i n f o r m a c i j a I X Y= 0 . 5 0 9 3 1 7 2 0 7 5 5 7
H s u m a= 1 . 3 0 1 9 6 0 9 1 6 9
# I z r a c u n a v a n j e Shannonove e n t r o p i j e z a u l a z n i n i z s i m b o l a
# U prvom d i j e l u v r s i s e d e t e k c i j a s v i h s i m b o l a
# U drugom k o r a k u s e i z r a c u n a v a f r e k v e n c i j a s i m b o l a
# U p o s l j e d n j e m koraku v r s i s e proracun e n t r o p i j e
import m a t h
from s e t s i m p o r t S e t
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Ulazni niz simbola :
Samo sam Samiru rekao da sam radi samo sedam sati
S i m b o l i koji se p o j a v l j u j u u u l a z n o m nizu :
[ ' a ' , ' ' , ' e ' , ' d ' , ' i ' , ' k ' , 'm ' , ' s ' , ' o ' , ' S ' , ' r ' , ' u ' , ' t ' ]
Vjerovatnoca pojavljivanja simbola :
0.20 0.18 0.04 0.06 0.06 0.02 0.12 0.10 0.06 0.04 0.06 0.02 0.02
Shannonova entropija :
3.33129001862
M i n i m a l a n broj bita za k o d o v a n j e s i m b o l a :
4
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Ulazni niz simbola :
00010101011110001001000010011
S i m b o l i koji se p o j a v l j u j u u u l a z n o m nizu :
[ '1 ' , '0 ' ]
Vjerovatnoca pojavljivanja simbola :
0.41 0.59
Shannonova entropija :
0.978449329269
M i n i m a l a n broj bita za k o d o v a n j e s i m b o l a :
1
from c o l l e c t i o n s i m p o r t C o u n t e r
import i t e r t o o l s
import m a t h
import n u m p y as np
from m a t p l o t l i b i m p o r t p y p l o t
#I z r a c u n a v a n j e sume s v i h f r e k v e n c i j a
vjerovatnoce = [ freq / float ( suma_frekvencija ) for freq in frekvencije ]
print ”Vjerovatnoce : ” , v j e r o v a t n o c e
HX = 0
# Izracunavanje entropije
f o r px in v j e r o v a t n o c e :
H X = H X + p x ∗ m a t h . l o g ( 1 . 0 / px , 2)
print ”Entropija : ” , HX
p y p l o t . f i g u r e ( ”Primjer d v i j e kockice ”)
axes = pyplot . subplot (111)
width = 0.2 # s i r i n a bar p r i k a z a
# dodavanje praznog p r o s t o r a p o s l i j e
suma_dvije_kockice = [ ” ”] + suma_dvije_kockice
# S p a c e t h e t i c k s and s e t t h e l a b e l s t o be t h e d i c e throw t o t a l s .
axes . s e t _ x t i c k s ( np . a r a n g e ( len ( s u m a _ d v i j e _ k o c k i c e ) ) + w i d t h / 2)
axes . set_xticklabels ( suma_dvije_kockice )
# Oznake na osama i n a s l o v u
p y p l o t . t i t l e ( ” E n t r o p i j a = %s b i t s / p a i r ” % ( H X ) , f o n t s i z e =20)
p y p l o t . x l a b e l ( ”Suma d v i j e k o c k i c e ” , f o n t s i z e =20)
p y p l o t . y l a b e l ( ” V j e r o v a t n o c a ” , f o n t s i z e =20)
# Prikaz dijagrama
pyplot . show ()
import math
import numpy as np
H_uslovna = 0
f o r i in l i s t ( range ( len ( p _ z d r u z e n a _ 1 ) ) ) :
f o r j in l i s t ( range ( len ( p _ z d r u z e n a _ 1 ) ) ) :
H _ u s l o v n a = H _ u s l o v n a + p _ z d r u z e n a _ 1 [ j ] [ i ] ∗ m a t h . l o g ( p _ b o j a [ j ] ←-
/ p _ z d r u z e n a _ 1 [ j ] [ i ] , 2)
p r i n t ” E n t r o p i j a H u s l o v n a b r o j I b o j a=” , H _ u s l o v n a
H_uslovna_2 = 0
f o r i in l i s t ( range ( len ( p _ z d r u z e n a _ 1 ) ) ) :
f o r j in l i s t ( range ( len ( p _ z d r u z e n a _ 1 ) ) ) :
H _ u s l o v n a _ 2 = H _ u s l o v n a _ 2 + p _ z d r u z e n a _ 1 [ i ] [ j ] ∗ m a t h . l o g ( p _ b r o j [ j ] ←-
/ p _ z d r u z e n a _ 1 [ i ] [ j ] , 2)
p r i n t ” E n t r o p i j a H u s l o v n a b r o j I b o j a=” , H _ u s l o v n a _ 2
Entropija H _ b o j a= 0 . 8 1 1 2 7 8 1 2 4 4 5 9
Entropija H _ b r o j= 0 . 9 9 2 7 7 4 4 5 3 9 8 8
Entropija H _ z d r u z e n a= 1 . 6 8 0 4 8 2 0 2 3 7 2
Entropija H _ u s l o v n a b r o j I b o j a= 0 . 8 6 9 2 0 3 8 9 9 2 6 3
Entropija H _ u s l o v n a b r o j I b o j a= 0 . 6 8 7 7 0 7 5 6 9 7 3 4
Entropija H _ b o j a=H _ z d r u z e n a −H _ u s l o v n a= 0 . 8 1 1 2 7 8 1 2 4 4 5 9
Entropija H _ b r o j=H _ z d r u z e n a −H _ u s l o v n a _ 2= 0 . 9 9 2 7 7 4 4 5 3 9 8 8
from c o l l e c t i o n s i m p o r t C o u n t e r
from c o d e c s i m p o r t open
import m a t h
print slova_frek
b r o j _ s l o v a=l e n ( f r e k v e n c i j e )
p r i n t ”Broj r a z l i c i t i h karaktera j e : ” , b r o j _ s l o v a
s u m a _ f r e k v e n c i j e = sum ( f r e k v e n c i j e )
p r i n t ”Ukupan b r o j s l o v a j e : ” , s u m a _ f r e k v e n c i j e
H = 0
for pxy in vjerovatnoce :
i f p x y != 0 :
H = H + pxy ∗ m a t h . log ( 1 . 0 / pxy , 2)
else :
H=H
p r i n t ” E n t r o p i j a H= ” , H
C o u n t e r ( { u ' ' : 4 8 9 4 3 , u ' a ' : 2 5 1 3 6 , u ' o ' : 2 1 9 0 9 , u ' i ' : 2 0 4 4 8 , u ' e ' : 2 0 2 2 3 , u ' ←-
n ' : 1 2 8 9 8 , u ' j ' : 1 1 4 3 6 , u ' s ' : 1 0 8 6 5 , u 'm ' : 1 0 1 9 9 , u ' u ' : 9 1 5 0 , u ' t ' : ←-
8 6 1 9 , u ' r ' : 8 2 5 8 , u ' d ' : 7 9 6 0 , u ' l ' : 6 8 0 6 , u ' v ' : 6 7 9 8 , u ' k ' : 6 1 5 3 , u ' , ' : ←-
5 9 6 3 , u ' p ' : 4 4 6 7 , u ' g ' : 3 9 7 1 , u ' b ' : 3 7 1 1 , u ' z ' : 3 7 0 6 , u ' \ u0161 ' : 3 3 1 0 , u←-
' . ' : 2 7 5 7 , u ' \ u010d ' : 2 3 0 3 , u ' \ u0107 ' : 1 7 7 4 , u ' \ u 0 1 7 e ' : 1 6 6 2 , u ' h ' : ←-
1 3 0 1 , u ' \n ' : 1 1 4 9 , u ' c ' : 7 6 3 , u '− ' : 7 0 5 , u ' \ u0111 ' : 4 8 3 , u 'N ' : 4 4 8 , u ' ? ' ←-
: 3 6 8 , u 'A ' : 3 3 6 , u ' I ' : 2 7 2 , u ' S ' : 2 6 1 , u 'O ' : 2 0 4 , u 'P ' : 2 0 0 , u 'M' : 1 9 5 , ←-
u ' Z ' : 1 8 9 , u ' : ' : 1 7 5 , u 'K ' : 1 7 1 , u 'D ' : 1 6 3 , u 'T ' : 1 5 4 , u 'U ' : 1 4 4 , u 'B ' : ←-
1 3 7 , u 'H ' : 1 2 7 , u ' J ' : 1 2 3 , u ' f ' : 1 1 6 , u 'G ' : 7 1 , u 'R ' : 6 6 , u ' ! ' : 6 1 , u ' \←-
u 0 1 0 c ' : 5 8 , u 'V ' : 5 5 , u ' \ u0160 ' : 5 5 , u ' ; ' : 3 5 , u ' L ' : 3 3 , u ' ) ' : 2 6 , u ' ( ' : ←-
2 6 , u ' \ u017d ' : 2 3 , u 'E ' : 1 9 , u ' \ u0142 ' : 1 0 , u 'C ' : 7 , u ' F ' : 7 , u ' \ u02d9 ' ←-
: 7 , u ' \ u2028 ' : 4 , u ' ” ' : 2 , u ' 1 ' : 1 , u ' 3 ' : 1 , u ' 2 ' : 1 , u ' 5 ' : 1 , u ' 7 ' : 1 , ←-
u ' 6 ' : 1 , u ' 4 ' : 1})
Broj r a z l i c i t i h k a r a k t e r a je : 74
Ukupan broj slova je : 278181
E n t r o p i j a H= 4 . 3 9 9 1 3 4 2 3 8 8 1
from P I L i m p o r t I m a g e
import n u m p y as np
import m a t h
s l i k a = I m a g e . open ( ” s l i k a g r a y . j p g ” )
# U c i t a v a n j e s l i k e kao i t e r a b l e list
pikseli = slika . getdata ()
# O d r e d j i v a n j e v j e r o v a t n o c a na b a z i f r e k v e n c i j a pojavljivanja
vjerovatnoce_s = [ freq / float ( suma_frek_s ) for freq in frekvencije ]
HXY = 0
for pxy in vjerovatnoce_s :
i f p x y != 0 :
HXY = HXY + pxy ∗ m a t h . log ( 1 . 0 / pxy , 2)
else :
H X Y=H X Y
Fakultet elektrotehnike Univerziteta u Tuzli
Teorija informacija i kodovanje
19 / 25
Entropija izvora informacija piksela sa slike - nastavak
p y p l o t . s u b p l o t (2 , 1 , 2)
# k r e i r a n j e v e k t o r a s a 256 g r e y −l e v e l v r i j e d n o s t i
x = range (256)
pyplot . plot (x , frekvencije )
p y p l o t . t i t l e ( ” E n t r o p i j a = %s b i t s / p i k s e l u ” % ( H X Y ) , f o n t s i z e =12)
p y p l o t . x l a b e l ( ”Grey−l e v e l ” )
p y p l o t . y l a b e l ( ”Frequency ”)
import m a t p l o t l i b . p y p l o t as pyplot
from P I L i m p o r t I m a g e
import n u m p y as np
import m a t h
#g e n e r i s i a n j e d v o d o m e n z i o n a l n e m a t r i c e 300 x 300 s l u c a j n i h v r i j e d n o s t i od 0 ←-
do 256
s l i k a _ n i z = ( np . r a n d o m . r a n d (300 , 300) ∗256) . a s t y p e ( np . u i n t 8 )
s l i k a = I m a g e . f r o m a r r a y ( s l i k a _ n i z ) #g e n e r i s a n j e slike
frek_sve = [ ] # Inicijalizacija
for red in slika_niz : # Prolaz kroz redove
for kol in red : # p r o l a z kroz kolonu u redu
frek_sve . append ( kol )
# O d r e d j i v a n j e v j e r o v a t n o c a na b a z i f r e k v e n c i j a pojavljivanja
vjerovatnoce_s = [ freq / float ( suma_frek_s ) for freq in frekvencije ]
HXY = 0
for pxy in vjerovatnoce_s :
i f p x y != 0 :
HXY = HXY + pxy ∗ m a t h . log ( 1 . 0 / pxy , 2)
else :
H X Y=H X Y
p y p l o t . s u b p l o t (2 , 1 , 2)
# make v e c t o r o f 256 g r e y −l e v e l v a l u e s
x = range (256)
pyplot . plot (x , frekvencije )
p y p l o t . t i t l e ( ” E n t r o p i j a = %s b i t s / p i k s e l u ” % ( H X Y ) , f o n t s i z e =12)
p y p l o t . x l a b e l ( ”Grey−l e v e l ” )
p y p l o t . y l a b e l ( ”Frequency ”)
# T r u n c a t e x a x i s a t max v a l u e of greyscale
pyplot . xlim ([0 , len ( frekvencije ) ] )
pyplot . show ()