Rad s Python modulom scipy
Uključivanje modula scipy
najčešće se vrši na način:
import scipy as sp
Uključivanje specifičnih podmodula vrši se na način:
import scipy.sparse.csgraph as csg
Python modul scipy: podmodul sparse.csgraph
Podmodul sparse.csgraph
nudi niz funkcija za izvršavanje algoritama nad grafovima definiranim matricom incidencije. Matricu incidencije implementiramo funkcijama za rad s poljima numpy
modula. Rezultate dobivene u vrijednosti numpy
matrica možemo prikazsti i pretvoriti u polja funkcijom toarray()
. Primjerice, jednostavan potpuni graf s četiri vrha možemo definirati kao iduće polje:
0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0
Nad grafovima definiranim matricama incidencija možemo provesti niz algoritama podmodula csgraph
:
csg.connected_components()
-- izračun broja komponenti povezanosti grafacsg.dijkstra()
-- izračun najkraćih puteva grafa po Dijkstrinom algoritmucsg.floyd_warshall()
-- izračun najkraćih puteva grafa po Floyd-Warshall algoritmucsg.bellman_ford()
-- izračun najkraćih puteva grafa po Bellman-Ford algoritmucsg.johnson()
-- izračun najkraćih puteva grafa po Johnsonovu algoritmucsg.breadth_first_order()
-- izračun poredaka čvorova po širinicsg.depth_first_order()
-- izračun poredaka čvorova po širinicsg.breadth_first_tree()
-- pretraživanje grafa u širinucsg.depth_first_tree()
-- pretraživanje grafa u dubinucsg.minimum_spanning_tree()
-- izračun minimalnog razapinjućeg stabla grafa
Zadatak
Definirajte numpy
poljem idući graf:
(0)--------(3)
/ \
/ \
/ \
(1)-------(2)
\
\ (6)
\
(4)
Zatim:
- saznajte broj komponenti povezanosti grafa,
- izračunajte minimalno razapinjuće stablo i prikažite ga u obliku matrice incidencije,
- usporedite vrijeme izvođenja izračuna najkraćih puteva grafa Bellman-Fordovim algoritmom s izračunom Dijkstrinim algoritmom,
- izvedite pretraživanje grafa u dubinu te dobiveno stablo prikažite u obliku matrice incidencije.
Python modul scipy: podmodul linalg
Podmodul linalg
nudi niz funkcija za izvršavanje izračuna iz područja linearne algebre. Funkcije podmodula linalg
možemo kombinirati s objektima modula numpy
. Svi objekti za rad s funkcijama podmodula linalg
moraju biti dvodimenzionalna polja.
Nad matricama (dvodimenzionalnim poljima oblika (n,n)) možemo provesti iduće izračune:
linalg.inv()
-- inverziranje matricelinalg.solve()
-- izračun jednadžbea x = b
zax
linalg.det()
-- izračun determinante matricelinalg.lstsq()
-- izračun najmanjih kvadrata jednadžbeAx = b
Author: Domagoj Margan, Vedran Miletić