Napisz iterator
def wystapienia(tekst,baza):
który wypisze wszystkie wystapienia słów z kolekcji (np. listy) baza w napisie tekst.
Wystąpienia powinny być wypisane jako tuple: (napis z baza, indeks pasującego początku w tekst).
Uwaga: Wielkość liter nie powinna mieć znaczenia (Wskazówka: str.[TAB] w ipython).
#u'napis' koduje napis w unicode, który zachowuje się bardzo podobnie do str
list(wystapienia(u'Ale To Już byŁo',[u'aLe',u'był',u'o']))
[(u'aLe', 0), (u'o', 5), (u'by\u0142', 11), (u'o', 14)]
Całkowanie numeryczne metodą trapezu w $N-1$ punktach na przedziale $[a,b]$ wyraża się wzorem:
$$ \int_{a}^{b} f(x) dx \approx \frac{1}{2} \sum_{k=0}^{N-2} \left( x_{k+1} - x_{k} \right) \left( f(x_{k+1}) + f(x_{k}) \right) $$gdzie $x_0,x_1,\ldots,x_{N-1} \in [a,b]$
Napisz funkcję
def calka(f,a,b,N):która wykona takie całkowanie. Można założyć, że $a \lt b$.
Twoja funkcja powinna:
Napisz 2 wersje tej funkcji:
def fun(x):
return (x-3)*(x-5)*(x-7)+85
#Uzyskane wyniki mogą różnić się nieznacznie w zależnośći od implementacji
print calka(fun,1,5,10)
print calka_numpy(fun,1,5,50)
307.209876543 307.97334444
Dodatkowy 1 punkt: porównaj(wypisz) absolutną rożnicę wyników $calka$ oraz całkowania funkcją scipy.integrate.quad dla $N \in 5,10,15,20,25$
from scipy.integrate import quad
Ns = (5,10,15,20,25)
Napisz funkcję
def podzielne_stat(nlst,dzielniki):
która dla listy liczb naturalnych nlst oraz listy naturalnych dzielników dzielniki wypisze:
(reszta = n%d)
W rozwiązaniu użyj słownika(ów) dict, lub collections.Counter.
podzielne_stat([5,8,10,15],[2,3,5])
Procent podzielnych: {2: 50, 3: 25, 5: 75} Maks. reszta: {2: 1, 3: 2, 5: 3}
a) Napisz defincję klasy Zdarzenia
class Zdarzenia(object):
która ma następujący interfejs:
Konstruktor, który przyjmuje dowolną liczbę argumentów będących wagami
(liczby rzeczywiste - patrz przykład), następnie
1. odrzuca wszystkie wagi $w_i<=0$
2. zapamiętuje wewnątrz klasy ciąg $p_i = \frac{w_i}{\sum w_i}$
jako wektor np.array (jest to ciąg prawdopodobieństw sumujących się do 1)
property zwracające wektor prawdopodobieństw $p_i$
zwraca entropię policzoną ze wzoru ($H$ to entropia):
$ H = -\sum^N_{i=1}p_i \log(p_i)$
Użyj funkcji np.sum i np.log (logarytm naturalny)
import numpy as np
from numpy import sum, log, log2
b) Napisz podklasę Zdarzenia_lg2 , która do liczenia entropii używa logarytmu o podstawie 2 (np.log2)
Przykład:
zd=Zdarzenia(1.,3.,11.,4.,-1.)
print "Prob1 =",zd.prob
print "H1 =", zd.entropia()
zd2=Zdarzenia_lg2(1.,3.,11.,4.,-1.)
print "Prob2 =",zd2.prob
print "H2 =", zd2.entropia()
Prob1 = [ 0.05263158 0.15789474 0.57894737 0.21052632] H1 = 1.09086727857 Prob2 = [ 0.05263158 0.15789474 0.57894737 0.21052632] H2 = 1.57378881307
Przeanalizuj przykładowy kod poniżej, oraz wynikowy wykres.
"""
Compute the coherence of two signals
"""
import numpy as np
import matplotlib.pyplot as plt
# make a little extra space between the subplots
plt.subplots_adjust(wspace=0.5)
dt = 0.01
t = np.arange(0, 30, dt)
nse1 = np.random.randn(len(t)) # white noise 1
nse2 = np.random.randn(len(t)) # white noise 2
r = np.exp(-t/0.05)
cnse1 = np.convolve(nse1, r, mode='same')*dt # colored noise 1
cnse2 = np.convolve(nse2, r, mode='same')*dt # colored noise 2
# two signals with a coherent part and a random part
s1 = 0.01*np.sin(2*np.pi*10*t) + cnse1
s2 = 0.01*np.sin(2*np.pi*10*t) + cnse2
plt.figure(figsize=(8,6),facecolor='w')
plt.subplot(211)
plt.plot(t, s1, 'b-', t, s2, 'g-')
plt.xlim(0,5)
plt.xlabel('time')
plt.ylabel('s1 and s2')
plt.grid(True)
plt.subplot(212)
cxy, f = plt.cohere(s1, s2, 256, 1./dt)
plt.ylabel('coherence')
plt.show()
Napisz funkcję
def coherence3(s1,s2,s3):
która wykona wykres, taki jak poniżej.
#s1, s2 wzięte z przykładu powyżej
coherence3(s1,s2,s1+s2)