Python je interpretiran splošno-namenski jezik s katerim kahko delamo zahtevne obdelave podatkov.
1. Prva funkcija
[leon@prelog ~]$ python
Python 2.4.3 (#1, Sep 3 2009, 15:37:37)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def square(x):
... """ Računa kvadrat """
... return x*x
...
>>> print square(3)
9
>>> square(4.3+3j) # kompleksno število
(9.4899999999999984+25.799999999999997j)
>>> help(square)
Izpiše
Help on function square in module __main__:
square(x)
Računa kvadrat
(END) # pritisni q
2. Osnove jezika
2.1 Predstavitev osnovnih tipov
>>> 2+2
4
>>> # Komentar
... 2+3.5
5.5
>>> 3/4
0
>>> (1+2j) # seznam
(1+2j)
>>> _/(1-2j)
(-0.59999999999999998+0.80000000000000004j)
s spremenljivkami
>>> mis=5
>>> macka=7
>>> mis/macka
0
z nizi znakov
>>> print "Predstavitev" + " Pythona " + 's primeri'
Predstavitev Pythona s primeri
Operacije na znakovnih nizih so lahko enostavne ali pa tudi ne
>>> zival = "Žirafa"
>>> zival[3]
'r'
>>> zival[3]='w'
Traceback (most recent call last):
File "", line 1, in ?
TypeError: object does not support item assignment
>>> wzival=zival[:3]+'c'+zival[4:]
>>> wzival
'\xc5\xbdicafa'
>>> #tezave zaradi unicode
...
Operacije s seznami:
>>>
>>> stala=["tele", "krava", "pujski"]
>>> len(stala)
3
>>> stala.append("gosi")
>>> stala
['tele', 'krava', 'pujski', 'gosi']
>>> stala[1]="osel"
>>> stala
['tele', 'osel', 'pujski', 'gosi']
2.2 Osnove nadzora poteka
if/then:
>>> def max3(a,b,c):
... """ Vrne največje izmed števil a,b,c
... """
... if a <= b :
... if b <= c :
... return c
... else:
... return b
... else:
... if a <= c:
... return c
... else:
... return a
...
>>> print(max3(3,4,5))
5
>>> print(max3(5.2, 4.1, 6.2))
6.2
>>> print (max3(6.1, 5.1, 4.1))
6.1
while:
>>> def triplusena(n):
... """ Problem 3n+1
... """
... while n != 1:
... print n
... if (n % 2) != 0 :
... n=3*n+1
... else:
... n = n/2
... print n
...
>>> triplusena(25)
25
76
38
19
58
29
88
44
22
11
34
17
52
26
13
40
20
10
5
16
8
4
2
1
for:
>>> def reverse(s):
... for i in range(1, len(s)+1):
... print s[len(s)-i],
...
>>> reverse("abcdef")
f e d c b a
3. Definiranje funkcij
3.1 Privzeti argumenti
>>> def moj_mucek(ime="muca", st_nog=4, barva="bela"):
... print("Moj ljubljenček je %s %s barve in ima %d nog"%(ime, barva, st_nog))
...
>>> moj_mucek()
Moj ljubljenček je muca bela barve in ima 4 nog
>>> moj_mucek(barva="črna")
Moj ljubljenček je muca črna barve in ima 4 nog
>>> moj_mucek("stonoga", 100, "zelene")
Moj ljubljenček je stonoga zelene barve in ima 100 nog
3.2 Spremenjljivo število argumentov
>>> def nakupovalni_seznam(dan, *seznam):
... print dan, "Ne pozabi kupiti"
... print(seznam)
... for i in seznam:
... print ('-', i)
...
>>> print nakupovalni_seznam("ponedeljek")
ponedeljek Ne pozabi kupiti
()
None
>>> print nakupovalni_seznam("ponedeljek", "ravioli", "omaka")
ponedeljek Ne pozabi kupiti
('ravioli', 'omaka')
('-', 'ravioli')
('-', 'omaka')
None
>>> print nakupovalni_seznam("ponedeljek", "ravioli", "omaka", "prašek", "milo")
ponedeljek Ne pozabi kupiti
('ravioli', 'omaka', 'pra\xc5\xa1ek', 'milo')
('-', 'ravioli')
('-', 'omaka')
('-', 'pra\xc5\xa1ek')
('-', 'milo')
None
4 Seznami
4.1 Funkcije za uporabo seznamov
>>> zivali=["muca", "ovca", "krava"]
>>> zivali.sort()
>>> zivali
['krava', 'muca', 'ovca']
>>> ptice=['orel', 'jastreb', "sokol"]
>>> zivali.extend(ptice)
>>> zivali
['krava', 'muca', 'ovca', 'orel', 'jastreb', 'sokol']
>>> zivali.remove("orel")
>>> zivali
['krava', 'muca', 'ovca', 'jastreb', 'sokol']
4.2 Iteracije na seznamih
Napišemo datoteko capitalize.py
# coding=UTF-8
def capitalize(m):
"""lepo izpiše besedilo z veliko prvo črko in prešteje št. znakov"""
return m.title()+ ' ('+str(len(m))+')'
if __name__ == "__main__":
l=["usnje", "svila", "žamet"]
# iteriranje
for i in l:
print(capitalize(i))
#ne iteriraj, map!
print(map(capitalize, l))
else:
Pass
in jo poženemo z
[leon@prelog py]$ python capitalize.py
Usnje (5)
Svila (5)
žAmet (6)
['Usnje (5)', 'Svila (5)', '\xc5\xbeAmet (6)']
5. Razno
5.1 Delo z datotekami
Ustvarimo datoteko isci.py
# coding=UTF-8
def isci(ime, iskani_niz, velikost):
""" Išče niz v podani datoteki.
Če je velikost n, dela neodvisno od velikosti črk
"""
if velikost=='n':
iskani_niz=iskani_niz.lower()
# odpremo datoteko
f = open(ime, 'r')
for vrsta in f:
if velikost == 'n':
l1=vrsta.lower()
else:
l1=line
if l1.count(iskani_niz) > 0:
print vrsta,
isci("/etc/passwd", "root", "n")
Rezultat:
5.2 Modul pickle
Se uporablja za delo z binarnimi datotekami.
>>> import pickle
>>> l=["gorski", "zdenka", "edamer"]
>>> f=open("/tmp/siri", "w")
>>> pickle.dump(l, f)
>>> f.close()
>>>
>>> # Ponovno odpri datoteko
...
>>> f=open("/tmp/siri", "r")
>>> l1=pickle.load(f)
>>> f.close()
>>> print l1
['gorski', 'zdenka', 'edamer']
6. Moduli
6.1 Prostori imen (namespaces)
>>> def jakost(x, n):
... i = 1
... res = x
... while i < n:
... res = res*x
... i = i+1
... return res
...
>>> print str(jakost(3,4))
81
Numpy
Priročnik za uporabo v znanstvene namene je mogoče dobiti na spletni strani http://docs.scipy.org/doc/numpy/reference/.
Podrobnejši vodič za numpy se lahko prebere na http://www.scipy.org/Tentative_NumPy_Tutorial
Z numpy se lahko v pythonu uporablja numerično programiranje z matrikami in ostalimi numeričnimi funkcijami
- ndarray - večdimenzijske tabele
- ufunc - univerzalne funkcije za ndarray
Poleg tega je možen še dotop do
- fft - fas fourier
- random -naključna števila
- linalg -linearna algebra (lapack, ATLAS, MKL + BLAS)
- distutils - distribucija Python paketoc
- f2py - fortetran wrappee
numpy ndarray
- shape - Večdimenzijski dostop
- dtype - tipi dvojne ločljivosti
Kreiranje matrik:
- zeros(shape[,dype, order]) - vrne matriko ničel
- ones(shape)
- empty(shape)
- something_like) - Vrne matriko kot je a napolnjeno z ni
- array(object) - vrne matriko iz seznama
- loadtxr(fname,..) prebere datoteko v matriko
- fromstring(string,...) vrne matriko iz niza znakov
Numerični obsegi
- linspace(start, stop, ..) vrne matriko enakomerno napolnjeno s števili
- arrange([start]m stop, [,step, dtype]) kot linspace vendat z definicijo koraka namesto števila točk
- logspace(start, stop, ...) vrne matriko števil razporejeno enakomerno v logaritmičnem prostoru
- meshgrid(x,y)
Matrike:
- mat(data) - Interpretira vhod kot matriko
- diag(v) izloči diagonalno matrikoo
- ...
>>> import numpy as np
>>> a = np.zeros(5)
>>> print(a)
[ 0. 0. 0. 0. 0.]
>>>
>>>
>>> b= np.zeros((2,5), dtype=int)
>>> print(b)
[[0 0 0 0 0]
[0 0 0 0 0]]
>>> c=np.ones_like(b)
Iz obstoječih podatkov in obsegov
>>> l=[1,2,3,4]
>>> a=np.array(l)
>>> a=np.linspace(0.0, 1.0, 10)
>>> a, dx = np.linspace(0.0, 1.0, 10, endpoint=False, retstep=True)
>>> print dx
0.1
Kreiranje matrik
>>> m = np.diag(np.arange(6))
>>> print(m)
[[0 0 0 0 0 0]
[0 1 0 0 0 0]
[0 0 2 0 0 0]
[0 0 0 3 0 0]
[0 0 0 0 4 0]
[0 0 0 0 0 5]]
>>>
>>> m=np.tri(6, k=-2)
>>> print(m)
[[ 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0.]
[ 1. 0. 0. 0. 0. 0.]
[ 1. 1. 0. 0. 0. 0.]
[ 1. 1. 1. 0. 0. 0.]
[ 1. 1. 1. 1. 0. 0.]]
>>>
Manupulacija z oblikami matrik
>>> a=np.arange(10)
>>> b=a.reshape((2,5))
>>> b
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
>>> print(b)
[[0 1 2 3 4]
[5 6 7 8 9]]
>>> print(a)
[0 1 2 3 4 5 6 7 8 9]
>>> b.resize((5,2))
>>> c=b.transpose()
b je samo pogled na a in se zato hkrati spreminja!
Indeksiranje
- x[start, stop]
- če sta start ins top negativna so interpretirane kot da so od začetka ali konca
- če start ni podan je nič
- če stop ni podan je privzeto n
-
>>> b[0,0] = 0
>>> x=np.arange(19)
>>> print(x)
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18]
>>> print(x[1:7:2])
[1 3 5]
>>> print(x[-2:10])
[]
>>> print(x[-3:3: -1])
[16 15 14 13 12 11 10 9 8 7 6 5 4]
>>> print(x[5:])
[ 5 6 7 8 9 10 11 12 13 14 15 16 17 18]
# napredno indeksiranje
Globalne operacije z matrikami
Univerzalne funkcije z ufunc
- sin, cos,root
- trapz . Integrira po dani
- gradient . gradient v matriki
- diff - razlika
Ostalo
- Linearna algebra
- fft - Fast Fourier Transform
- Sortiranje
- polinomi
- finančne funkcije
Povzetek
- Nupmy je velika knjižnica
- primerljivo z MATLAB
- Uporabo se lahko priuči z delom na projektu
Vaje v numpy
Kreiranje matrik:
Alociraj matriko, ki bo podala naslednjo oblike:
Vaja 1
[100 101 102 103 104 105 106 107 108]
>>> a=np.arange(100,109)
>>> print a
Vaja 2
[-2. -1.8 -1.6 -1.4 -1.2 -1. -0.8 -0.6 -0.4 -0.2 -0. 0.2 0.4 0.6 0.8
1. 1.2 1.4 1.6 1.8]
>>> np.set_printoptions(precision=1, suppress=True)
>>> print np.linspace(-2, 1.8, 20)
Vaja 3
[ 0.001 0.00129155 0.0016681 0.00215443 0.00278256 0.00359381
0.00464159 0.00599484 0.00774264 0.01 ]
>>> np.set_printoptions(precision=8, suppress=True)
>>> print np.logspace(-3, -2, 10)
Vaja 4
[[ 0. 1. 1. 1. 1.]
[ 0. 0. 1. 1. 1.]
[ 0. 0. 0. 1. 1.]
[ 0. 0. 0. 0. 1.]
[ 0. 0. 0. 0. 0.]]
>>> print numpy.transpose(numpy.tri(5,5,-1))
Matplotlib
Knjižnica za izdelavo grafov