NAPOMENA: Materijal sa ovog repozitorijuma, pripremljen je i u vidu PDF, kao i propratni Python kod
-
🔭 Trenutno predajem na fakultetu
-
🌱 Trenutno izucavam ML algortme
-
📫 Mozete me kontaktirati na milos.todorov82@gmail.com
- Python Liste - kratki osvrt
- Prednosti biblioteke NumPy
- Kreiranje listi pomocu Numpy biblioteke
- Matrice
- Operacija sa matricama
- Inverzna matrica
- Kreiranje matrica pomocu Numpy biblioteke
- Operacije sa matricama korišćenjem NumPy biblioteke
- Kod generisan od strane ChaGpt za resavanje sistema linearnih jednacina matricnom metodom, koriscenjem biblioteke Numpy
- Reference
-
Liste u Pythonu mogu da sadrže stringove, brojeve, ili druge liste. One služe za skladištenje drugih objekata
-
Elementima liste pristupamo pomoću indeksa, sa tim da u Pythonu indeksi kreću od nule
-
Liste u Pythonu mogu da se proširuju, skraćuju, spajaju, kao i da se obriše deo liste. Python podržava mogućnost da se liste kreiraju u okviru liste
-
Python ima sledeće tipove podataka koji mogu da se nađu u listama
Tabela 1: Tipovi podataka u Pythonu
| Tip promenljive | Objasnjenje |
|---|---|
| Predstavljaju tekstualne podatke koji se prikazuju pod navodnicima, na primer ‘Lista’ | |
| Predstavljaju cele brojeve, na primer -2, 0, 5 | |
| Predstavljaju realne brojeve, na primer 4.2, -3.6 | |
| Predstavljaju kompleksne brojeve, npr 3.0 + 2.0j | |
| Predstavlja tip koji može imati logičke vrednosti, tačno, ili netačno, odnosno True, ili False |
Primer 1: Formiranje liste u Pythonu
listaElemenata = ['a','b','c',['e','m'],'d','f',5,6,10,11.5]
print(listaElemenata)Primer 2: Pristupanje elementu liste
listaElemenata[3][1]'m'
Ovo je primer ugnježdene liste. Pošto indeksi u Pythonu kreću od nule, lista u okviru liste sa elementima ['e','m'] se nalazi na trećem indeksu, a elemenat 'm' je u okviru date liste na prvom mestu, tj.indeksu.
Primer 3: Dodavanje elementa na kraj listi
listaElemenata.append('DodatiElement')
print(listaElemenata)['a', 'b', 'c', ['e', 'm'], 'd', 'f', 5, 6, 10, 11.5, 'DodatiElement']
U prethodnom primeru 3. je prikazana jedna od metoda koja može da se primeni na Python listama. Sledi tabela sa metodama koje se koriste u okviru Python listi.
Tabela 2: Metode u okviru lista u Pythonu
| Metoda | Objasnjenje |
|---|---|
| Dodavanje elementa na kraju liste | |
| Briše sve elemente liste | |
| Vraća kopiju liste | |
| Prebraja elemente liste | |
| Dodaje elemente neke druge liste, na kraj postojeće liste | |
| Vraća elemenat na definisanoj poziciji indeksa | |
| Ubacuje elemenat u listu na određenu poziciju | |
| Briše elemenat u listi na određenoj poziciji indeksa | |
| Briše tačno određeni elemenat u listi koji se navede u okviru ove metode, odnosno naredbe | |
| Obrće elemente u listi | |
| Sortira elemente u listi |
U prethodnoj tabeli 2. Prikazane su neke od naredbi koje mogu da se primene na Python listama. Pored python naredbi, postoji biblioteka NumPy, koja je pogodna za rad sa listama i matricama. Kreirao ju je Travis Oliphant 2005. godine.
Ova Python biblioteka se nalazi na sledećoj web adresi: Numpy
Sledi prikaz date biblioteke.
Neke od prednosti korišćenja biblioteke Numpy:
-
NumPy kreira niz objekata koji je 50x puta brži od klasičnih Python listi
-
Niz objekata u NumPy se naziva ndarray, koji obezbeđuje korišćenje gomile funkcija sa listama
-
Sadrži funkcije koje mogu da se koriste u matematičkim oblastima linearne algebre, Furijeove transformacije, kao i matricama, kao i mnogih drugih matematičkih funkcija
-
Ima veliku upotrebu u oblasti veštačke inteligencije, odnosno pri korišćenju ML agoritama
-
NumPy liste se smeštaju na jednom mestu u memoriji i iz tog razloga, lako im je pristupiti, što mogućava optimizaciju i brži rad sa listama
-
Numpy ima mogućnost kreiranja različitih distribucija, kao što su Normalna, Poasonova, Uniformna, Logistička itd…
-
Pored svega navedenog NumPy ima sve metode, kao i klasične Python liste, dok je lista tipova podataka proširena
-
Kod Numpy listi važe sve operacije sa listama kao i kod klasičnih Python listi
-
Elementima NumPy liste pristupamo takođe pomoću indeksa, kao što je prikazano u primeru 2
Slede primeri kreiranja listi. Da bi se koristila neka biblioteka u Pythonu, ona mora da se pozove pomoću naredbe
Primer 4: Kreiranje različitih Numpy listi
import numpy as np
L1 = np.array([1, 1])# jednodimenzionalna lista
print('Lista L1: \n',L1)
L2 = np.array([[3, 2, 1], [7, 8, 9]]) # Dvodimenzionalna lista sa integerima
print('Lista L2: \n',L2)
L3 = np.array([[3.5, 2, 1.0], [7.5, 8, 9.1]]) # Dvodimenzionalna lista sa realnim brojevima
print('Lista L3: \n',L3)
L4 = np.array([3+7j, 2+8j, 1+9j], dtype = complex) # Jednodimenzionalna lista sa kompleksnim brojevima
print('Lista L4: \n',L4)Lista L1:
[1 1]
Lista L2:
[[3 2 1]
[7 8 9]]
Lista L3:
[[3.5 2. 1. ]
[7.5 8. 9.1]]
Lista L4:
[3.+7.j 2.+8.j 1.+9.j]
Postoji i drugi načini da kreiraju brojčane liste u zavisnosti od potrebe, a što će biti prikazano u narednom primeru.
Primer 5: Nekoliko drugih načina kreiranja Numpy listi
L5 = np.arange(1,6) # kreiranje jednodimenzionalne liste integera od 1 do 5
#Ovde lista mora da ide do 6, jer indeksi u Python idu do nekog broja, ali ne obuhvataju i sam broj
print('Lista L5: \n',L5)
L6 = np.ones(5) #kreiranje liste gde su svi elementi jedinice
print('Lista L6: \n',L6)
L7 = np.zeros(5) #kreiranje liste gde su svi elementi nule
print('Lista L7: \n',L7)
L8 = np.linspace(0,5,6) # Kreiranje liste brojeva sa jednakim intervalima
print('Lista L8: \n',L8)
L9 = np.random.randn(5) # kreiranje liste brojeva sa normalnom raspodelom
print('Lista L9: \n',L9)
L10 = np.random.randint(1,10,5) # kreiranje liste brojeva sa slučajnim brojevima
print('Lista L10: \n',L10)Lista L5:
[1 2 3 4 5]
Lista L6:
[1. 1. 1. 1. 1.]
Lista L7:
[0. 0. 0. 0. 0.]
Lista L8:
[0. 1. 2. 3. 4. 5.]
Lista L9:
[-1.42150501 1.24819973 -1.24384724 -1.03554861 0.3136415 ]
Lista L10:
[9 4 2 7 5]
Neka je zadat sistem od
Brojevi
Matricom nazivamo pravougaonu šemu oblika
Matrica se može označiti na sledeći način
je reda 2x3, jer ima 2 vrste i 3 kolone.
NAPOMENA: Determinanta je realan broj, koji je zapisan kao šema brojeva, za razliku od matrice koja je šema proizvoljnih elemenata.
Elementi
Zbir matrica
Mogu da se sabiraju samo matrice istih dimenzija. Sabira se svaki elemenat prve matrice sa odgovarajućim elementom druge matrice.
Važe i sledeće osobine:
- Komutativnost
$A+B=B+A$ - Asocijativnost
$(A+B)+C=A+(B+C)$
Primer 6: Sabrati matrice:
Rešenje:
Proizvod matrice sa skalarom je matrica koja se dobije kada scalar
Važe i sledeće osobine:
- Komutativnost
$\gamma \cdot A=A \cdot \gamma$ - Asocijativnost
$(\alpha \cdot \beta) \cdot A=\alpha \cdot (\beta \cdot A)$ - Distributivnost u odnosu na zbir skalara
$(\alpha+ \beta) \cdot A=\alpha \cdot A+\beta \cdot A$ - Distributivnost u odnosu na zbir matrica
$\alpha \cdot (A+B)=\alpha \cdot A+\alpha \cdot B$
Primer 7: Pomnožiti matricu
sa skalarom
Rešenje:
Proizvod matrica je matrica
Kada se prikaže pomoću koeficijenata imamo sledeći zapis.
Napomena: Proizvod dve matrice je definisan samo ako je broj kolona prve matrice jednak sa brojem vrsta druge matrice!
Važe i sledeće osobina:
- Asocijativnost
$(A \cdot B) \cdot C=A \cdot (B \cdot C)$
U opštem slučaju ne važi komutativnost
Primer 8: Pomnožiti matrice
Rešenje:
Transponovana matrica je matrica u kojoj su vrste(kolone) zamenile mesta sa odgovarajućim kolonama(vrstama), odnosno za matricu
Primer 9: Neka je data matrica
Naći njenu transponovanu matricu.
Resenje:
Primer 10: Neka je data matrica
Naći njenu transponovanu matricu.
Resenje:
Inverzna matrica je kvadratna matrica
Kvadratna matrica A je regularna ako je
Adjugovana matrica matrice A u oznaci
Inverzna matrica
Primer 12: Naći inverznu matricu
Rešenje:
Matrice dimenzija
Primer 13: Kreiranje matrice korišćenjem naredbe array
import numpy as np
M1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Kreiranje matrice koriscenjem naredbe array
print('Matrica M1: \n',M1)Matrica M1:
[[1 2 3]
[4 5 6]
[7 8 9]]
Takođe matrica može da se napravi od jednodimenzionalnog niza elemenata, pomoću naredbe
Primer 14: Kreiranje matrice korišćenjem naredbe reshape
import numpy as np
M2 = np.arange(1,10).reshape(3,3) # Kreiranje matrice korscenjem naredbe reshape
print('Matrica M2: \n',M2)Matrica M2:
[[1 2 3]
[4 5 6]
[7 8 9]]
Matrica može da nastane od više listi, ili jedne iste, ali moraju biti iste dužine, a što će biti prikazano u naredna dva primera, korišćenjem prethodno definisanih lista iz primera 4.
Primer 15: Kreiranje matrice spajanjem dve iste liste L1
import numpy as np
M3 = np.array([L1,L1]) #Kreiranje matrice, spajanjem dve iste NumPy liste
print('Matrica M3: \n',M3)Matrica M3:
[[1 1]
[1 1]]
Primer 16: Kreiranje matrice spajanjem dve različite Python liste
import numpy as np
P1 = [1, 2.5, 3]
P2 = [4, 5, 6]
M4 = np.array([P1,P2]) #Kreiranje matrice, spajanjem dve različite Python liste
print('Matrica M4: \n',M4)Matrica M4:
[[1. 2.5 3. ]
[4. 5. 6. ]]
Postoji mogućnost da se kreira matrica i pomoću naredbe
Primer 17: Kreiranje matrice korišćenjem naredbe matrix
import numpy as np
M5 = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Kreiranje matrice koriscenjem naredbe matrix
print('Matrica M5: \n',M5)Matrica M5:
[[1 2 3]
[4 5 6]
[7 8 9]]
Ako spojimo dve liste L1 iz primera 4. na sledeći način, dobićemo listu, koja liči na matricu, ali nije, nego je dupla ista lista.
Primer 18: Spajanje dve liste u jednu listu
import numpy as np
L1 = np.array([1,1])# Dobija se dupla ista lista u okviru liste
DuplaLista=[L1,L1]
print(DuplaLista)[array([1, 1]), array([1, 1])]
Ako prvom elementu promenimo vrednost na nula, vrednost nula ćemo imati u obe liste, jer je ista lista, a što se vidi iz narednog primera.
Primer 19: Dodeliti prvom elementu liste vrednost nula
DuplaLista[0][0]=0
print(DuplaLista)[array([0, 1]), array([0, 1])]
Ako istu dodelu vrednosti nula primenimo na matricu M3, iz primera 15. Koja se isto sastoji iz duple liste L1, dobija se vrednost nula na prvom elementu matrice, jer je to matrica, a ne lista. Upravo na ovaj primer treba obratiti pažnju. Sledi primer koji prikazuje promenu vrednosti matrice.
Primer 20: Promeniti vrednosti prvog elementa matrice na nulu
M3[0][0]=0
print('Matrica M3 sa izmenjenim prvim elementom: \n',M3)Matrica M3 sa izmenjenim prvim elementom:
[[0 1]
[1 1]]
Za prikaz ovih operacije biće korišćeni primeri koji su prethodno objašnjeni u okviru poglavlja Operacije sa matricama. Za početak sledi primer sabiranja matrica, korišćenjem matrica iz primera 6.
Primer 21: Sabrati matrica
import numpy as np
A = np.array([[1, 3, 1], [1, 5, 4], [1, 2, 4]])
B = np.array([[1, 2, 1], [-1, 4, 8], [-2, -1, 4]])
C = A + B # pri sabiranju matrica se koristi plus
print('Zbir dve matrice je matrica C: \n',C)Zbir dve matrice je matrica C:
[[ 2 5 2]
[ 0 9 12]
[-1 1 8]]
Iz prethodnog primera može se uočiti da se rezultati podudaraju, sa primerom 6.
Sledi primer množenja matrice sa skalarom. Za ovo će biti koriščen primer 7. iz istog poglavlja. Kada se matrica množi sa skalarom, koristi se klasična operacija množenja(
Primer 22: Pomnožiti matricu skalarom
D = 2*A
print('Matrica pomnozena skalarom je matrica D: \n',D)Matrica pomnozena skalarom je matrica D:
[[ 2 6 2]
[ 2 10 8]
[ 2 4 8]]
Kada se množe dve matrice, tada ne može da se koristi klasično množenje, nego se koristi Numpy funkcija dot. Sledi primer množenja matrica.
Primer 23: Pomnožiti dve matrice
import numpy as np
A = np.array([[1, 3, 1], [1, 5, 4], [1, 2, 4]])
B = np.array([[1, 2], [-1, 4], [-2, -1]])
F = A.dot(B) # mnozenje matrica sa naredbom dot
print('Proizvod dve matrice je matrica F: \n',F)Proizvod dve matrice je matrica F:
[[ -4 13]
[-12 18]
[ -9 6]]
Kod generisan od strane ChaGpt za resavanje sistema linearnih jednacina matricnom metodom, koriscenjem biblioteke Numpy
U okviru ovog poglavlja biće prikazan Python kod za rešavanje sistema lineranih jednačina matričnom metodom, ali uz upotrebu NumPy bibliotke. Kod je izgenerisan primenom veštačke inteligencije ChatGPT. Biće prikazan kompletan matematički postupak rešavanja narednog primera, radi boljeg razumevanja zadatka. Dobijeni rezultati su identični.
Primer 24: Rešiti sistem jednačina matričnom metodom.
Rešenje:
U narednom primeru prikazan je kod koji je izgenerisao ChatGpt.
Primer 25: Prikazati Python kod izgenerisan od strane ChatGPT za resavanje sistema lin. jednačina
import numpy as np
# Define the coefficient matrix and the constant matrix
A = np.array([[1, 2, 2],
[1, -2, -3],
[1, -1, -2]])
b = np.array([2, 0, 1])
# Find the inverse of A
A_inv = np.linalg.inv(A)
# Find the solution vector
x = np.dot(A_inv, b)
# Print the solution vector
print(f"x = {x[0]}")
print(f"y = {x[1]}")
print(f"z = {x[2]}")x = 0.0
y = 3.0
z = -2.0
- https://www.programiz.com/python-programming/matrix
- https://www.w3schools.com/python/numpy/numpy_intro.asp
- https://numpy.org/doc/stable/reference/generated/numpy.array.html#numpy.array
- https://numpy.org/doc/stable/reference/generated/numpy.matrix.html
- https://www.digitalocean.com/community/tutorials/concatenate-lists-python
- https://openai.com/product/gpt-4





