Sveučilište u Zagrebu
Fakultet elektrotehnike i računarstva
(c) 2015-2016 Domagoj Alagić
Verzija: 0.1
Zadnji put ažurirano: 7. listopada 2016.
import numpy as np
import scipy as sp
from scipy import stats
import matplotlib.pyplot as plt
from sklearn import datasets
%pylab inline
Populating the interactive namespace from numpy and matplotlib
(a) Kreirajte dvije liste: $a = [2, 4, 5, 6, 8, 13]$ i $b = [1, 3, 10, 13, 15]$.
(b) Napišite kôd koji konkatenira liste $a$ i $b$ u listu $c$:
(c) Sortirajte listu $c$:
(d) Izbacite duplikate iz liste c:
(e) Dohvatite i ispišite (pazite na indeksiranje od 0):
(f) Generirajte interval brojeva ran
s elementima iz $[2, 20]$.
(g) Ispišite sve generirane brojeve iz intervala skupa s njihovim indeksima u listi:
(h) Korištenjem sažetog zapisa liste (engl. list comprehension) transformirajte listu ran
tako da sve elemente zamijenite njihovim prirodnim logaritmom.
(a) Napišite funkciju make_3sg_form(word)
koja vraća glagol u trećem licu jednine za dani glagol u infinitivu, npr. try -> tries. Slijedite sljedeća pravila:
NB: Znakovni niz je zapravo polje znakova tako da vrijede "trikovi" za indeksiranje polja.
(b) Isprobajte implementiranu funkciju za fix, brush, cry, play i echo. Primjetite da je ovo složen problem i da tri jednostavna pravila neće uspjeti pokriti sve slučajeve.
Napišite funkciju filterShortWords (word_list, min_length)
koja prima listu riječi i minimalnu dopuštenu duljinu riječi te vraća novu listu riječi koja sadrži samo one riječi čija je duljina veća od minimalne dopuštene. Obavezno provjerite da je dana duljina riječi pozitivan broj veći od 1. Ako nije, bacite iznimku. U slučaju da korisnik nije zadao duljinu, funkcija radi jednako kao da je korisnik zadao duljinu od dva znaka (koristite podrazumijevane argumente, engl. default arguments).
Zadatak riješite na dva načina:
for
petlji,filter
u kombinaciji s lambda-izrazom.(d) Pokažite na primjeru da su izlazi implementiranih funkcija jednaki.
NB: Podrazumijevani elementi (ili grupa istih) uvijek dolaze na kraju liste argumenata u definiciji funkcije.
Dana vam je mapa koja za ključeve sadrži nazive programskih jezika, a za vrijednosti liste programskih paradigmi koje određeni jezik pokriva.
langs_paradigms = {
"Java" : ["object-oriented", "imperative"],
"Haskell" : ["functional"],
"Lisp" : ["functional", "procedural"]
}
Napišite razred ProgLanguageRepository
uzimajući u obzir sljedeće stvari:
data
.count
koja vraća broj programskih jezika dostupnih u repozitoriju.get_langs_paradigms (lang)
koja za dano ime programskog jezika vraća listu njegovih paradigmi ili vraća None
ako taj jezik ne postoji u repozitoriju.add_lang_paradigm (lang, paradigm)
koja danom programskom jeziku dodaje paradigmu (ako je već nema).remove_lang_paradigm (lang, paradigm)
koja danom programskom jeziku miče danu paradigmu (ako je ima).data
.Pokažite na par primjera da vaša implementacija radi.
(a) Napišite kôd koji stvara sljedeća tri vektor-stupca, jedan vektor-redak i kvadratnu matricu ranga 2 (koristite numpy
za cijeli zadatak):
$ x_{1} = \begin{pmatrix} 1\\ 2\\ \end{pmatrix}$, $ x_{2} = \begin{pmatrix} 3\\ 5\\ \end{pmatrix}$, $ x_{3} = \begin{pmatrix} -3\\ 4\\ \end{pmatrix}$, $ x_{4} = \begin{pmatrix} 4\\ 0\\ \end{pmatrix}^T$, $ A = \begin{pmatrix} 5 & 3 \\ 10 & 6 \\ \end{pmatrix} $
(b) Zatim napišite naredbe koje stvaraju dvije nove matrice: matricu $C$ dimenzija $2\times3$ koja se dobije tako da se vektor-stupci poredaju horizontalno jedan kraj drugog te matricu $D$ dimenzija $3\times2$ koja se dobije tako da se matrica $A$ postavi ispod danog vektor-retka.
(c) Izračunajte umnožak matrica $C$ i $D$ te ga pohranite u matricu $U$.
(d) Nadalje, napišite kôd koji izračunava inverz matrice $U$ (spremiti u matricu $I$) kojeg zatim transponira (i sprema u matricu $R$).
(e) Izračunajte sumu svih elemenata u matrici $D$ (spremite u varijablu D_total
), ali i sume po zasebnim dimenzijama (D_x
, D_y
).
(f) Ispišite determinantu matrice $R$.
(g) Isprobajte vrijedi li $R\cdot R^{-1} = I$.
(h) Stvorite vektor-stupac $n$ dimenzija $4\times 1$ čiji su svi elementi 0 (bez ručnog pisanja svih elemenata).
(a) Napišite kôd koji iscrtava sljedeće funkcije:
$f_{1}(x) = \sqrt{(1-(|x|-1)^2)}$ i $f_{2}(x) = -3 \cdot \sqrt{(1-\sqrt{\frac{|x|}{2}})}$
pritom definirajući domenu funkcija kao $x \in [-2, 2]$ (u 1000 točaka). Graf funkcije $f_{1}(x)$ prikažite plavom bojom, a graf funkcije $f_{2}(x)$ crvenom. Iscrtajte oba grafa na istoj slici tako da su vidljive točke iz intervala $x \in [-3, 3]$ i $y \in [-3, 1.5]$.
(b) Ostavite oznake osi jednostavno kao $x$ i $y$. Iscrtajte legendu u donjem desnom kutu tako da je naziv funkcije $f_{1}(x)$ bolja polovica, a naziv funkcije $f_{2}(x)$ dobra polovica.
(a) Učitajte skup podataka Iris. Ovaj skup podataka sadrži 150 instanci, 50 za svaku od tri klase (Iris setosa, Iris virginica i Iris versicolor). Svaka instanca, to jest vektor, sadrži četiri značajke: širinu i dužinu latice te širinu i dužinu čašićnog listića. U polju iris.data nalaze se instance, dok se u iris.target nalaze oznake instanci (njihove stvarne klase). Ispišite dimenzije polja instanci te polja njihovih stvarnih oznaka.
(b) Budući da ne možemo vizualizirati 4-dimenzijske podatke, iz svake instance izdvojite samo prve dvije značajke. Koristite indeksiranje poljem brojeva. Ispišite dimenzije dobivenog polja instanci.
(c) Logičkim indeksiranjem razdvojite primjere za svaku od tri klase. Ispišite dimenzije dobivenih polja.
(d) Napišite kôd koji iscrtava četiri zasebna grafa (četiri podgrafa u 2x2 mreži), pri čemu tri grafa prikazuju instance određene klase (točke u 2-dimenzijskom prostoru), a četvrti ih prikazuje sve (u različitim bojama). Osigurajte da svi grafovi prikazuju isto područje grafa (npr. $x \in [4,9]$ i $y \in [1.5, 5]$).
Proučite kako se postavlja veličina glavnog okvira (u koji se smještaju podgrafovi) te ju postavite na 10x8.
(a) Napišite kôd koji u petlji iscrtava grafove normalnih distribucija definiranih s parametarima $\mu$ i $\sigma$:
Dakle, generirat ćete pet grafova normalnih distribucija: $\mathcal{N}_{1}(\mu = 3, \sigma = 1)$, $\mathcal{N}_{2}(\mu = 3, \sigma = 2)$, ... , $\mathcal{N}_{1}(\mu = 3, \sigma = 5)$.
Grafove iscrtajte na istoj slici tako da su vidljive točke iz intervala $x \in [-15, 15]$ i $y \in [0, 0.5]$. Za svaki graf upotrijebite drugu boju. Za domenu koristite $[-50, 50]$ (uzorkujte 1000 točaka). Također napravite legendu u gornjem lijevom kutu koji će sve grafove nazvati onako kako su i u zadatku definirani ($\LaTeX$ kôd radi unutar znakovnih nizova koji definiraju oznaku unutar legende), npr. $\mathcal{N}_{1}(\mu = 3, \sigma = 5)$.
(b) Sada pretpostavite da imate zadanu distribuciju ocjena na nekom kolegiju koja se pokorava normalnoj distribuciji $\mathcal{N}_{G}(\mu = 62, \sigma = 13)$. Najprije je iscrtajte (nebitno kako), ali osigurajte da je domena $[0, 100]$ (raspon mogućih bodova na kolegiju) također uzorkovana u 1000 točaka.
(c) Međutim, vi polažete kolegij naknadno na roku, a profesoru se zaista ne da ispravljati vaš ispit. Kako bi tome doskočio, profesor često koristi tradicionalnu metodu stubišta (https://www.linkedin.com/pulse/20140414044726-2259773-a-guide-to-grading-exams) koju možemo aproksimirati nasumičnim odabirom broja iz distribucije bodova na ispitu. Napišite kôd koji iz distribucije bodova $\mathcal{N}_{G}$ dohvaća slučajnu vrijednost koja predstavlja vaš broj bodova (zaokružite bodove na cijeli broj).
Iscrtajte konture 2-dimenzijske Gausove distribucije $\mathcal{N} (\vec{\mu}, \Sigma)$ sa sljedećim parametrima:
1 & 1 \ 0.5 & 3 \ \end{pmatrix}$
Za domenu uzmite $x_{1} \in [-1, 2]$ i $y_{2} \in [-2, 2]$.