Programiranje u fizici
- 2. Deo -
Na drugom predavanju prešli smo:
- korišćenje biblioteka (u našem slučaju numpy i matplotlib biblioteka)
- rad sa listama i nizovima
1. Gotove biblioteke
Pod bibliotekom u pythonu se podrazumeva skup fajlova (koji se drugačije nazivaju modulima) koji sadrže kood koji nešto radi i koji se može lako pozivati u novim programima koji se pišu. Biblioteke nemerljivo olakšavaju upotrebu pythona, jer sadrže komande i funkcije koje korisnik ne mora da piše od početka, kako bi rešio neki problem svojim programom.
Na primer, bez učitavanja biblioteka python je u mogućnosti da radi samo sa osnovnim matematičkim operacijama. Da bi se mogao izračunati, na primer, koren iz nekog broja, neophodno je učitati određenu biblioteku (kao što je math ili numpy). Dalje, u nekom programu se može javiti potreba da se numerički reši neka diferencijalna jednačina. Korisnik može sam napisati kood koji rešava diferencijelnu jednačinu numerički, a može iskoristiti neku od biblioteka koje sadrže koodove za numeričko rešavanje diferencijalnih jednačina i u svega jedan ili dva reda doći do rešenja.
Kao i u slučaju funkcija, biblioteke u pythonu se mogu podeliti na ugrađene (standardne) biblioteke i biblioteke razvijene od strane trećih lica. Standardne biblioteke su one koje dolaze zajedno sa pythonom i koje su odmah dostupne za upotrebu. Biblioteke trećih lica su razvijene od strane drugih pojedinaca ili timova i ogromnom većinom su “open source” tipa.
Mnogo je primera gde biblioteke olakšavaju upotrebu pythona. Na primer, pomoću samog python-a nije moguće crtati grafike. Međutim, instalacijom biblioteke matplotlib dobija se čitav niz komandi kojima je moguće praviti i fino podešavati grafike.
Programski jezik python krasi ogromna i vrlo aktivna programerska zajednica. Iz tog razloga, postoji ogroman broj gotovih i besplatno dostupnih biblioteka. To u praksi znači da ukoliko postoji potreba da se napiše neki program korisnici pythona ne moraju da kreću od nule, nego mogu da iskoriste neku od gotovih biblioteka i tako skrate vreme razvoja.
U okviru ove sekcije samo će biti navedene gotove biblioteke koje će biti korišćene tokom ovog kursa, a njihova upotreba će biti objašnjena u odgovarajućim poglavljima.
2. Instalacija i učitavanje biblioteka
Učitavanje biblioteka u python program je jednostavno. Naravno, pre učitivanja neophodno je instalirati željenu biblioteku. U slučaju kada se koristi Anaconda IDE, instaliranje može da se izvrši iz “Anaconda Navigator” interfejsa, kartice “Environments” koja se nalazi sa leve strane prozora. Instaliranje biblioteka, nevezano da li se koristi Anaconda ili neki drugi IDE, može da se izvrši i iz komandne linije korišćenjem nekih od menadžera paketa (kao što su conda ili pip).
Učitavanje biblioteke se vrši komandom import. Bitno je napomenuti da se može učitati ili cela biblioteka ili deo biblioteke. Ovo je veoma korisno zato što su neke biblioteke velike, pa njihovo konstantno učitavanje može uticati na performanse programa. Takođe, bitno je naglasiti i da se bilo kojoj biblioteci može dodeliti proizvoljno ime prilikom njenog učitavanja, što znanto olakšava njeno kasnije pozivanje.
Uzimajući navedeno u obzir, tri su osnovna načina učitavanja biblioteka (demonstrirano na primeru numpy biblioteke):
- import numpy (učitavanje cele biblioteke matplotlib.pyplot)
- import numpy as np (učitavanje cele biblioteke numpy i njeno označavanje kao np)
- from numpy import sqrt (učitavanje samo funkcije sqrt iz biblioteke numpy)
Primer 2.1 – Učitavanje i korišćenje numpy biblioteke – 1. način
Primer 2.2 – Učitavanje i korišćenje numpy biblioteke – 2. način
Primer 2.3 – Učitavanje i korišćenje numpy biblioteke – 3. način
NAPOMENA: Kada se koristi neka funkcija koja je deo neke druge funkcije (ili biblioteke), onda se ona naziva “metod”. Na primer, jedna od funkcija koju nudi numpy biblioteka jeste funkcija sqrt. Kao što smo videli, ova funkcija se poziva komandom numpy.sqrt (ili np.sqrt ukoliko numpy prozovemo np prilikom učitavanja).
NAPOMENA: Vremenom su se u python zajednici neke oznake za biblioteke učestalile. Na primer, za numpy biblioteku je to “np” za matplotlib.pyplot je “plt”, itd. U ovom kursu ćemo koristiti upravo te oznake.
3. Biblioteka numpy
Biblioteka numpy je jedna od najbitnijih i najčešće korišćenih biblioteka programskog jezika python. Sadrži brojne matematičke funkcije i omogućava rad sa nizovima. Bilo bi neophodno neloliko strana samo da bi se navele mogućnosti koje nudi ovaj biblioteka. Za ovaj kurs, koristićemo sledeće tri funkcije iz numpy biblioteke:
- arange(min,max,korak) – (definiše niz )
- zeros(n) – (definiše niz od određenog broja članova koji svi imaju vrednost 0)
- ones(n) – (definiše niz od određenog broja članova koji svi imaju vrednost 1)
- linspace(min,max,n) – (definiše niz od n članova čije su vrednosti ravnomerno raspoređene između brojeva min i max)
Upotreba navedenih funkcija je demonstrirana u narednom primeru:
Primer 3.1 – Korišćenje nekih funkcija numpy paketa
Na prethodnom predavanju je za definisanje skupa vrednosti između dva broja korišćena ugrađena funkcija range(). Nedostatak te funkcije je što korak između vrednosti nije moguće da bude decimalna vrednost. Upotrebom numpy biblioteke to je moguće postići i funkcijom arange i funkcijom linspace. Međutim, preporučuje se upotreba linspace funkcije, zbog efikasnijeg uzimanja u obzir krajnjih tačaka/vrednosti.
4. Rad sa listama i nizovima
Rad sa skupovima podataka je posebno efikasan kod programskog jezika python. Skupovi podataka se mogu javiti u dva oblika – kao lista ili kao niz. I jedan i drugi oblik skupova podataka imaju svoje prednosti i mane, a glavna razlika se ogleda u tom što liste mogu da sadrže različite tipove podataka, dok nizovu mogu da sardže samo numeričke tipove podataka.
When \(a \ne 0\), there are two solutions to \(ax^2 + bx + c = 0\) and they are
$$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$
Liste se definišu praktično na isti način kao i druge promenljive. Prvo se da naziv promenljive, a zatim se posle znaka jednakosti elementi liste smeštaju u uglaste zagrade. Neki primeri listi su dati u primeru 4.1.
Definisanje nizova i razlike između lista i nizova
Python nema funkciju kojom se direktno definiše niz. Međutim, upotrebom numpy biblioteke, lista se lako može transformisati u niz. U te svrhe koristi se funkcija np.aray(naziv_liste). U primeru 4.2 demonstrirana je transformacija liste u nizove, kao i razlika između lista i nizova.
Primer 4.1 – Definisanje listi
Lista1 sadrži samo brojeve, lista2 samo stringove, dok je lista3 kombinacija brojeva i stringova.
Primer 4.2 – Definisanje nizova i razlike između liste i niza
U linijama 3 – 7 su definisane liste i nizovi upotrebom funkcije np.array(), dok su u linijama 16 i 17 definisani zbirovi dve liste i dva niza. Zbir dve liste će dovesti zapravo do spajanja listi, dok će sabiranje nizova dovesti do sabiranja svakog od elemenata.
4.1 Indeksiranje elemenata listi i nizova
Svaki element liste ili niza je indeksiran određenim brojem. Prvi član liste/niza je indeksiran brojem 0, drugi član brojem 1, treći brojem 2, i tako dalje. Indeksi elemenata liste ili niza se mogu iskoristiti za izdvajanje elemenata. Izdvojeni element liste se može modifikovati, zameniti ili ukloniti. U narednim primerima biće demonstrirane neke od osnovnih operacija sa skupovima.
Primer 4.3 – Rad sa listama, izdvajanje elemenata
4.2 Brisanje i zamena vrednosti elementa liste ili niza
Primer 4.4 – Rad sa listama, zamena vrednosti elementa liste/niza
Brisanje elementa liste se može postići sledećim metodima:
- remove (za brisanje elementa određene vrednosti)
- pop (za brisanje elementa prema njegovom indeksu)
- clear (za brisanje svih elemenata iz liste)
- del (za brisanje cele liste)
Primena navedenih metoda je demonstrirana u sledećem primeru.
Primer 4.5 – Rad sa listama, brisanje elementa liste
Primena 18. linije koda će u potpunosti obrisati listu kao objekat iz memorije, pa će python na kraju programa prijaviti da lista pod nazivom “lista” ne postoji.
Brisanje elementa niza se ne može postići načinima predstavljenim u slučajevima listi. Za brisanje elementa niza mora se koristiti delete metod numpy biblioteke, sa kojim se brisanje elementa vrši na osnovu njegovog indeksa. Opšti oblik ovog metoda je delete(naziv_niza, indeks_elementa), dakle delete metod kao argument potražuje naziv niza i broj pod kojim je element indeksiran. Uslov je da se mora ponovo definisati promenljiva koja predstavlja niz, kao što je demonstrirano u sledećem primeru.
Primer 4.5 – Rad sa listama, brisanje elementa liste
Za razliku od slučaja sa listom, u liniji 8 poslednjeg primera bilo je neophodno napisati “niz = np.delete(niz, 4)”, a ne samo “np.delete(niz,4)”.