Nahajate se tukaj

Osnove pythona

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

  • min(axis)
  • ...

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