Knjižnica NumPy

Knjižnica NumPy

Avtor: Tilen Kavčič

Uvodne besede

NumPy je brezplačna razširitev pythonove knjižnice, ki nam omogoča, da pospešimo določene matematične algoritme na raven programskega jezika C.

Knjižnica programskemu jeziku Python da podporo za delo z večdimenzionalnimi tabelami in matrikami ter različne matematične algoritme iz linearne algebre, za delo s polinomi, trigonometričnimi funkcijami, itd.

V tem kratkem vodiču za uporabo knjižnice NumPy bomo obravnavali naslednje teme:

  • Kako namestiti knjižnico?
  • Zgodovina programske knjižnice
  • Zakaj NumPy?
  • Tabele in matrike
  • NumPy in Matlab
  • Operacije za tabele in matrike
  • Algoritme iz linearne algebre
  • Polinome
  • Naključna števila
  • Uporabne ukaze

Knjižnica je na voljo na spletni strani NumPy

Vodič za namestitev knjižnice

Pred začetkom namestitve knjižnice je potrebno imeti na računalniku nameščen Python 2.6-2.7 ali 3.x .

Windows:

Najlažji način namestitve numpy knjižnice je preko namestitvenega paketa, ki vsebuje Python, SciPy in NumPy. Paket se nahaja na spletni strani Enthought

Če pa želite optimalno zmogljivost na vašem računalniku, je potrebno NumPy knjižnico zgraditi preko prevajalnika. Koraki so na voljo na spletni strani http://www.scipy.org/Installing_SciPy/Windows

Mac OS X:

Najlažji način namestitve NumPy knjižnice je preko programa MacPorts (MacPorts ). Po namestitvi programa MacPorts, v terminal vnesemo naslednje ukaze:

$sudo port install python27 @2.7.3
$sudo port install py27-numpy @1.6.2
$sudo port install python_select
$python_select python27

Na koncu preverimo ali je NumPy pravilno nameščen. To naredimo tako, da v terminal vnesemo naslednje vrstice:

$python
Python 2.7.3 (v2.7.3:70274d53c1dd, Apr  9 2012, 20:52:43)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> numpy.test()

Kratka zgodovina programske knjižnice

Vse je začelo leta 1995 z knjižnico Numeric, ki jo je v veliki meri napisal Jim Hugunin s pomočjo Jima Fultona, Davida Ascherja, Paula DuBoisa in Konrada Hinsena. Rojstvo Numeric je povzročila želja po numerični knjižnici za programski jezik Python, ki bi nadomestila takrat pomnilniško zelo požrešen Matlab. Programerji, ki si imeli to željo, so izbrali Python, zaradi berljivosti kode.

Numeric so na zečetku želeli vključiti v standardno knjižnico Python vendar je niso, ker je ni bilo lahko vzdrževati. Poleg tega pa je bil zelo počasen pri obdelavi velikih tabel.

Zato so kmalu za tem ustvarili novo knjižnico z imenom Numarray, pri kateri so optimizirali obdelavo velikih tabel, a posledično tudi še dodatno upočasnili obdelavo manjših tabel.

Programerji so za obdelavo manjših in velikih tabel morali uporabljati knjižnico Numeric in Numarray, kar ni bilo ravno praktično.

Leta 2005 je Travis Oliphant želel združiti vse knjižnice za delo s tabelami pod eno streho. Zato so izvorno kodo knjižnice Numeric izboljšali za lažje vzdrževanje in jo naredili fleksibilno. Zaradi njene fleksibilnosti so jo lahko s kodo Numarray združili in s tem odpravili pomankljivosti obeh knjižnic.

Novo knjižnico so poimenovali SciPy.

Ker knjižnica SciPy vsebuje pestro izbiro algoritmov in metod, so zaradi njene obsežnosti v ta namen ustvarili knjižnico NumPy, ki se bo oosredotočila le na delo s tabelami.

Zakaj NumPy?

NumPy je posebna knjižnica za delo s tabelami in je bila narejena za pospešitev Pythona.

Python je tolmačeni programski jezik, kar pomeni, da se bo koda kasneje izvršila kot koda, ki je šla le skozi prevajalnik.

V ta namen je bila knjižnica NumPy tudi ustvarjena. Počasnost kode so se loti z različnimi numeričnimi algoritmi za delo z večdimezionalnimi tabelami.

Primer

V naslednjem primeru vam bom pokazal kako hiter je Python z NumPy-jem proti navadnem Python-u.

Potek poskusa:

  • Ustvarili bomo naključno 10000x10000 veliko matriko/tabelo
  • Matriko/tabelo transponiramo
  • Izpišemo čas

Prenesi program

Koda:

Python z NumPy-jem:

import numpy
import time

def testNumpy(n,m):
  zact = time.time()
  matrika = numpy.random.rand(n,m)
  matrikaT = matrika.T
  return time.time() - zact

Python brez NumPy-ja:

import random
import time

def testPython(n,m):
  zact = time.time()
  matrika = []
  for vrstice in range(n):
    matrika.append([random.random() for stolpci in range(m)])
  matrika = transponiranje(matrika)
  return time.time() - zact

#funkcija za transponiranje
def transponiranje(matrika):
  matrikaT = []
  for elemenet in range(len(matrika[0])):
    matrikaT.append([vrstica[elemenet] for vrstica in matrika])
  return matrikaT

Rezultati:

>>> 2.5195980072 sec Python z NumPy-jem
>>> 109.103322029 sec Python brez NumPj-ja

Pri tem je Python z NumPy-jem porabil največ 585MB delovnega pomnilnika, Python brez NumPy-ja pa največ 3.98GB delovnega pomnilnika.

Tabele ali matrike?

Knjižnica NumPy vsebuje poleg tabel (ang.: arrays) tudi matrike ter algoritme in metode za delo z njimi.

Opomba: Array in Matrix so objekti!

Vendar pa matrike niso najboljši način za obdelavo podatkov saj:

  1. Večina stvari, ki jih vrnejo NumPy funkcije so v obliki tabele
  2. Pri množenju posameznih elementov matrike je potrebno klicati funkcijo ( multiply(A,B) )
  3. Kvečjemu dvo dimenzionalne

Vendar imajo tudi svoje prednosti:

  1. Obnašajo se približno tako kot matrike v Matlab-u (Opomba: To je stvar okusa.)
  2. Uporaba metod in algoritmov iz linearne algebre (transponiranje, invezija, konjugirano transponiranje,...)

Primer obeh zapisov:

  • Zapis tabele: array([[1,0,0],[0,1,0],[0,0,1]])
  • Zapis matrike: matrix("[1,0,0;0,1,0;0,0,1]")

Zaključek: Ker vsaka metoda iz NumPy-ja vrne tabelo je zaželjeno uporabljati tabele.

Matlab spoznaj NumPy

NumPy ima podobne ukaze kot Matlab, vendar sta popolnoma različni stvari. Ideja NumPy-ja je, da se brez težav združi z Python kodo. Ustvarimo hibrit med Matlabom in Pythonom. To nam prinaša velike prednosti pri razvijanju programske opreme, ki je pri Matlab-u ne moremo. Vendar imam Matlab večjo knjižnico metod za delo z matrikami kot NumPy.

Nekaj površinskih razlik med Matlab-om in NumPy-jem:

  1. Poimenovanje datotek: V Matlab-u morajo datoteke imeti enako ime kot funkcija, ki jo vsebuje. Pri NumPy-ju pa lahko datoteko poljubno poimenujemo.
  2. Indeksi: Matlab začne indeksirat elemente tabel/matrik z 1, NumPy pa začne z 0.
  3. Grafi: Matlab ima vgrajene pakete/knjižnice s katerimi lahko rišemo grafe. NumPy pa tega na žalost nima in je potrebno namestiti knjižnico matplotlib .

Razlike v ukazi med Matlab-om in NumPy-jem

Razlika v ukazih

MatlabNumPyOpombe
ndims(a) ndim(a) Dimenzija matrike a
size(a) a.shape Velikost matrike a
[1 2 3; 4 5 6] array([[1.,2.,3.],[4.,5.,6.]]) Definicija matrike
a(end) a[-1] Vrnemo zadnji element v matriki
a(1,1) a[0,0] Vrnemo prvi element v prvi vrstici matrike
a(:,2) a[:,1] Vrnemo drugi stolpec matrike
a(2,:) a[1,:] Vrnemo drugo vrstico matrike
a.' a.transpone ali a.T Transponiramo matriko
a' a.conj().transpose() ali a.conj().T Konjugirano transponiramo matriko
a * b dot(a,b) Matrično množenje
a.*b a * b Množenje elementov
a./b a/b Delimo elemente
a.^2 a**2 Kvadriranje elementov
b=a b = a.copy() Vrednosti spremenljivke določimo drugi spremenljivki
b=a(1,:) b = a[0,:].copy V spremenljivko b shranimo prvo vrstico matrike a
b=a(:) b = a.flatten(1) Spremenimo matriko v vektor
1:10 arange(1.,11.) Ustvarimo vektor z naraščajočim številom od 1 do 10
[1:10]' arange(1.,11.)[:,newaxis] Ustvarimo transponirani vektor
zeros(1,3) zeros((1,3)) Ustvarimo ničelno matriko velikosti 1x3
ones(1,3) ones((1,3)) Ustvarimo matriko s samimi enkami velikosti 1x3
eye(3) eye(3) Ustvarimo identično matrike velikosti 3x3

Kako ustvarimo tabelo?

Kako ustvarimo tabelo?

Tabelo ustvarimo tako, da v objektu array v oglatih oklepajih podamo posamezne vrednosti stolpcev in vrstic.

Opomba: Med pisanjem primerov predpostavimo, da smo uvozili knjižnico NumPy s klicem

import NumPy

Primer:

>>> tabela = numpy.array([[1,2],[3,4],[5,6]])
>>> tabela
    array([[1, 2],
           [3, 4],
           [5, 6]])

Generiranje tabel

Nekaj malega o objektih

Več o tabelah: Klik

Generiranje tabel

  • numpy.zeros(shape, dtype=float, order='C') : poljubno velika ničelna tabela
  • numpy.ones(shape, dtype=None, order='C') : poljubno velika tabela z enaki
  • numpy.eye(N, M=None, k=0, dtype=<type 'float'>) : poljubna velika tabela z enkami po diagonali
  • numpy.diag(v, k=0) : tabela s podano diagonalo
  • numpy.random.rand(d0, d1, ..., dn) : poljubno velika tabela z naključnimi vrednosti

Primeri

Objekti

Če želimo kopirati vrednost tabele, uporabimo metodo copy() . Tabele so objektnega tipa, kar pomeni, da so njene vrednosti shranjene v nekem naslovu na delovnem pomnilniku. Torej je v spremenljivki, kateri določimo tabelo, shranjen le naslov s katerim dostopamo do njenega objekta na pomnilniku.

Primer:

Spremenljivki tabela1 dodelimo tabelo numpy.array([[1,2],[3,4],[5,6]]) . Pri tem se na pomnilniku ustvari objekt numpy.array([[1,2],[3,4],[5,6]]) . Naslov objekta na pomnilniku pa se shrani v spremenljivko tabela1 .

Ustvarimo dve novi spremenljivki tabela2 in tabela3 .

Spremenljivka tabela2 shrani naslov objekta numpy.array([[1,2],[3,4],[5,6]]) na pomnilniku. Pri tem se ne ustvari nov objekt.

Spremenljivka tabela3 pa dobi preko naslova iz spremenljivke tabela1 objekt numpy.array([[1,2],[3,4],[5,6]]) . Pri tem se ustvari nov objekt, ki ni povezan s prejšnim objektom.

Če spremenimo vrednost tabele pri spremenljivki tabela1 , se nam vrednost pri spremenljivki tabela2 tudi spremeni. To se zgodi, ker obe spremenljivki hranita naslov istega objekta na pomnilniku. Pri spremenljivki tabela3 pa do tega ne pride, saj spremenljivka hrani drugi naslov kot tabela1 in tabela2 .

>>> tabela1 = numpy.array([[1,2],[3,4],[5,6]])
>>> tabela2 = tabela1
>>> tabela3 = tabela1.copy()
>>> tabela1.fill(0)
>>> tabela1
    array([[0, 0],
           [0, 0],
           [0, 0]])
>>> tabela2
    array([[0, 0],
           [0, 0],
           [0, 0]])
>>> tabela3
    array([[1, 2],
           [3, 4],
           [5, 6]])

Rezanje in klicanje elementov iz tabele

Elemente iz tabele kličemo kot pri Pythonu. Podamo ime spremenljivke na katero je vezana tabela in takoj za tem podamo v oglatih oklepajih indeks elementa, ki ga želimo vrniti. Rezanje se izvaja na podoben način, le da podamo v oglatih oklepajih začetni in končni indeks.

Primer:

>>> tabela = numpy.array([[1,2],[3,4],[5,6]])
>>> tabela[1]
    array([3, 4])
>>> tabela[:1]
    array([[1, 2]])
>>> tabela[1:]
    array([[3, 4],
           [5, 6]])

Metode na tabelah

1. numpy.imag(val) ali tabela.imag

Metoda sprejme za parameter poljubno veliko tabelo. Vrne tabelo enakih dimenzij z imaginarnimi komponentami elementa. Če element tabele nima imaginarne komponente, vrne 0.

Primer:

>>> tabela = numpy.array([[1+4j,2+5j,3+6],[3+1j,4+6j,5+3j]])
>>> tabela.imag
    array([[ 4.,  5.,  6.],
           [ 1.,  6.,  3.]])
>>> tabela.imag = numpy.array([[2,7,4],[8,3,7]])
>>> tabela
    array([[ 1.+2.j,  2.+7.j,  3.+4.j],
           [ 3.+8.j,  4.+3.j,  5.+7.j]])
>>> tabela.imag = 42
>>> tabela
    array([[ 1.+42.j,  2.+42.j,  3.+42.j],
           [ 3.+42.j,  4.+42.j,  5.+42.j]])
>>> tabela = numpy.array([[1,5j,3+6j],[3,6j,3]])
>>> tabela.imag
    array([[ 0.,  5.,  6.],
           [ 0.,  6.,  0.]])

2. numpy.real(val) ali tabela.real

Metoda sprejme za parameter poljubno veliko tabelo. Vrne tabelo enakih dimenzij z realnimi komponentami elementa. Če element tabele nima realne komponente, vrne 0.

>>> tabela = numpy.array([[1+4j,2+5j,3+6j],[3+1j,4+6j,5+3j]])
>>> tabela.real
array([[ 1.,  2.,  3.],
       [ 3.,  4.,  5.]])
>>> tabela.real = numpy.array([[2,7,4],[8,3,7]])
>>> tabela
    array([[ 2.+4.j,  7.+5.j,  4.+6.j],
           [ 8.+1.j,  3.+6.j,  7.+3.j]])
>>> tabela.real = 42
>>> tabela
    array([[ 42.+4.j,  42.+5.j,  42.+6.j],
           [ 42.+1.j,  42.+6.j,  42.+3.j]])
>>> tabela = numpy.array([[1+4j,5j,3+6j],[3+1j,6j,3j]])
>>> tabela.real
    array([[ 1.,  0.,  3.],
           [ 3.,  0.,  0.]])

Metode na tabelah

3. numpy.all(a,axis=None,out=None)

Metoda preveri ali so vsi elementi v tabeli resnični. Če so, vrne True .

Metoda za prvi parameter a sprejme objekt, ki ga lahko spremenimo v tabelo. Pri parametru axis vnesemo os po kateri se bo izvedla operacija AND. Axis sprejme vrednost , ali . Pri vrednosti nam obravnava posamezne vrstice tabele, pri vrednosti nam obravnava stolpce in pri vrednosti pa nam združi vse elemente v eno vrstico in jih nato obravnava. Pri zadnjem parametru out pa določimo spremeljivko v kateri shranimo rezultate.

Opomba: Če mu podamo tabelo, ki vsebuje števila, bo vsa od nič različna števila obravnaval kot vrednost True, vsa števila 0 pa kot False.

Primer:

>>> numpy.all([[False, False,True],[True,True,True]])
    False
>>> numpy.all([[False, False,True],[True,True,True]],axis=1)
    array([False,  True], dtype=bool)
>>> numpy.all([[False, False,True],[True,True,True]],axis=0)
    array([False, False,  True], dtype=bool)
>>> numpy.all([1,4,5,0,-42])
    False
>>> numpy.all([1,4,5,10,-42])
    True

4. numpy.any(a,axis=None,out=None)

Metoda preveri ali je vsaj en element v tabeli resnični. Če je, vrne True .

Metoda za prvi parameter a sprejme objekt, ki ga lahko spremenimo v tabelo. Pri parametru axis vnesemo os po kateri se bo izvedla operacija OR. Axis sprejme vrednost , ali . Pri vrednosti nam obravnava posamezne vrstice tabele, pri vrednosti nam obravnava stolpce in pri vrednosti pa nam združi vse elemente v eno vrstico in jih nato obravnava. Pri zadnjem parametru out pa določimo spremeljivko v kateri shranimo rezultate.

Opomba: Če mu podamo tabelo, ki vsebuje števila, bo vsa od nič različna števila obravnaval kot vrednost True, vsa števila 0 pa kot False.

Primer:

>>> numpy.any([[False, False,True],[True,True,True]])
    True
>>> numpy.any([[False, False,True],[True,True,True]],axis=0)
    array([ True,  True,  True], dtype=bool)
>>> numpy.any([[False, False,True],[True,True,True]],axis=1)
    array([ True,  True], dtype=bool)
>>> numpy.any([1,4,5,0,-42])
    True

Metode na tabelah

5. numpy.argmax(a,axis=None)

Metoda poišče največje vrednosti po vrsticah ali stolpcih in vrne njihove indekse.

Metoda za parameter a sprejme tabelo. Za parameter axis pa os po kateri bo metoda izvedla operacijo. Axis sprejme vrednost , ali . Pri vrednosti nam obravnava posamezne vrstice tabele, pri vrednosti nam obravnava stolpce in pri vrednosti pa nam združi vse elemente v eno vrstico in jih nato obravnava.

Primer:

>>> numpy.argmax([[0,1,2,8],[4,5,6,7]])
    3
    #ker axis ni podan, nam združi vse elemente v eno vrstico in nam vrne indeks največjega elementa
>>> numpy.argmax([[0,1,2,8],[4,5,6,7],[23,4,6,21]],axis=0)
    array([2, 1, 1, 2])
>>> numpy.argmax([[0,1,2,8],[4,5,6,7],[23,4,6,21]],axis=1)
    array([3, 3, 0])

6. numpy.argmin(a,axis=None)

Metoda nam poišče najmanjše vrednosti po vrsticah ali stolpcih in vrne njihove indekse.

Metoda za parameter a sprejme tabelo. Za parameter axis pa os po kateri bo metoda izvedla operacijo. Axis sprejme vrednost , ali . Pri vrednosti nam obravnava posamezne vrstice tabele, pri vrednosti nam obravnava stolpce in pri vrednosti pa nam združi vse elemente v eno vrstico in jih nato obravnava.

Primer:

>>> numpy.argmin([[0,1,2,8],[4,5,6,7]])
    0
    #ker axis ni podan, nam združi vse elemente v eno vrstico in nam vrne indeks najmanjšega elementa
>>> numpy.argmin([[0,1,2,8],[4,5,6,7],[23,4,6,21]],axis=0)
    array([0, 0, 0, 1])
>>> numpy.argmin([[0,1,2,8],[4,5,6,7],[23,4,6,21]],axis=1)
    array([0, 0, 1])

Metode na tabelah

7. numpy.argsort(a,axis=-1,kind="quicksort",order=None)

Metoda nam uredi tabelo v naraščajočem vrstem redu, nato nam vrne indekse urejenih elementov. Pri tem podano tabelo ne spreminja.

Metoda za parameter a sprejme tabelo. Za parameter axis pa os po kateri se bo izvedlo razvrščanje. Axis sprejme vrednost , ali . Pri vrednosti nam obravnava posamezne vrstice tabele, pri vrednosti nam obravnava stolpce in pri vrednosti pa nam združi vse elemente v eno vrstico in jih nato obravnava. Za parameter kind sprejme vrsto algoritma za razvrščanje.

Poznamo tri vrste algoritmov:

  1. quicksort : privzeti algoritem, v najslabšem primeru naredi zamenjav elementov Quicksort
  2. mergesort : srednje hiter algoritem, v najslabšem primeru naredili zamenjav elementov Mergesort
  3. heapsort : hiter algoritem, v najslabšem primeru naredili zamenjav elementov Heapsort

Primer:

>>> tabela=numpy.array([5,2,3,1])
>>> numpy.argsort(tabela)
    array([3, 1, 2, 0])
    #iz zgornje tabele jemljemo vrednosti, ki predstavljajo indekse prvotne tabele
    #ce vnašamo posamezne indekse, enega za drugim v prvotno tabelo (tabela[indeks]) dobimo elemente urejene tabele
>>> tabela[3]
    1
>>> tabela[1]
    2
>>> tabela[2]
    3
>>> tabela[0]
    5
>>> tabela=numpy.array([[5,2],[3,1]])
>>> numpy.argsort(tabela,axis=0)
    array([[1, 1],
       [0, 0]])
>>> numpy.argsort(tabela,axis=1)
    array([[1, 0],
           [1, 0]])

Metode na tabelah

8. numpy.sort(a,axis=-1,kind="quicksort",order=None)

Metoda vrne tabelo v naraščajočem vrstem redu.

Metoda za parameter a sprejme tabelo. Za parameter axis pa os po kateri se bo izvedlo razvrščanje. Axis sprejme vrednost , ali . Pri vrednosti nam obravnava posamezne vrstice tabele, pri vrednosti nam obravnava stolpce in pri vrednosti pa nam združi vse elemente v eno vrstico in jih nato obravnava. Za parameter kind sprejme vrsto algoritma za razvrščanje.

Opomba: Za vrste algoritmov glej opis metode numpy.argsort .

Primer:

>>> tabela=numpy.array([5,2,3,1])
>>> numpy.sort(tabela)
    array([1, 2, 3, 5])
>>> tabela=numpy.array([[5,2],[3,1]])
>>> numpy.sort(tabela)
    array([[2, 5],
           [1, 3]])

9. numpy.clip(a,a_min,a_max,out=None)

Metoda pregleda vrednosti elementov tabele in prilagodi vrednosti glede na dani interval. Če je vrednost v tabeli večja od intervala, metoda vrednost tabele nastavi na zgornjo mejo intervala. Če pa je vrednost manjša od intervala, metoda vrednost nastavi na spodnjo mejo intervala. Pri tem se ne ustvari nova tabela.

Metoda za parameter a sprejme tabelo. Za parameter "a_min" in "a_max" sprejme spodnjo in zgornjo mejo intervala. Oba lahko sprejmeta tudi seznam v katerem so shranjene minimalne oziroma maksimalne vrednosti posamezih vrednosti tabele. Metoda v tem primeru pogleda trenutni element v tabeli in ga primerja z istoležnim elementov v seznamih "a_min" in "a_max". Pri tem mora biti seznam mej enako dolg kot vrstica tabele. Parameter "out" pa sprejme prvotno tabelo ali pa tabelo z enakimi dimenzijami v katero shrani končno tabelo. Pri tem se podana tabela spremeni.

Primer:

>>> tabela = numpy.array([4,1,5,0,4,12,6,7])
>>> numpy.clip(tabela,1,5)
    array([4, 1, 5, 1, 4, 5, 5, 5])
>>> numpy.clip(tabela,[1,2,3,4,5,6,7,8],5)
    array([4, 2, 5, 4, 5, 6, 7, 8])

Metode na tabelah

10. numpy.conj(a)

Metoda nam konjungira vrednost ali posamezne vrednosti v tabeli.

Metoda za parameter a sprejme poljubno vrednost ali tabelo in vrne njeno konjungirano vrednost.

Primer:

>>> numpy.conj(2+5j)
    (2-5j)
>>> numpy.conj(numpy.array([[1+3j,4-1j],[2+1j,10+3j]]))
    array([[  1.-3.j,   4.+1.j],
           [  2.-1.j,  10.-3.j]])

11. numpy.cumprod(a,axis=None,dtype=None,out=None)

Metoda nam vrne tabelo v kateri so kumulativen zmnožek vrsticah ali stolpcih .

Metoda za parameter a sprejme poljubno veliko tabelo. Pri parametru axis določimo os na kateri se bo izvedla operacija. Axis sprejme vrednost , ali . Pri vrednosti nam obravnava posamezne vrstice tabele, pri vrednosti nam obravnava stolpce in pri vrednosti pa nam združi vse elemente v eno vrstico in jih nato obravnava. Parameter "out" pa sprejme prvotno tabelo ali pa tabelo z enakimi dimenzijami v katero shrani končno tabelo. Pri tem se podana tabela spremeni.

Primer:

>>> tabela = numpy.array([1,2,3,4,5])
>>> numpy.cumprod(tabela)
    array([ 1, 2, 6, 24, 120])
    #metoda najprej prepiše prvo vrednost tabele v začasno tabelo
    #zmnoži prvi element v začasni tabeli in drugi element v podani tabeli
    #nato zmnoži drugi element v začasni tabeli in tretji element v podani tabeli
>>> tabela = numpy.array([[1,2,3,4,5],[1,2,3,4,5]])
>>> numpy.cumprod(tabela,axis = 0)
    array([[ 1, 2, 3, 4, 5],
    [ 1, 4, 9, 16, 25]])
>>> numpy.cumprod(tabela,axis = 1)
    array([[ 1, 2, 6, 24, 120],
    [ 1, 2, 6, 24, 120]])
>>> numpy.cumprod(tabela,axis = 0, dtype=float)
    array([[ 1., 2., 3., 4., 5.],
    [ 1., 4., 9., 16., 25.]])

Metode na tabelah

12. numpy.cumsum(a,axis=None,dtype=None,out=None)

Metoda vrne tabelo v kateri so kumulativna vsota na vrsticah ali stolpcih.

Metoda za parameter a sprejme poljubno veliko tabelo. Pri parametru axis določim os na kateri se bo izvedla operacija.Axis sprejme vrednost , ali . Pri vrednosti nam obravnava posamezne vrstice tabele, pri vrednosti nam obravnava stolpce in pri vrednosti pa nam združi vse elemente v eno vrstico in jih nato obravnava. Parameter "out" pa sprejme prvotno tabelo ali pa tabelo z enakimi dimenzijami v katero shrani končno tabelo. Pri tem se podana tabela spremeni.

Primer:

>>> tabela = numpy.array([1,2,3,4,5])
>>> numpy.cumsum(tabela)
    array([ 1,  3,  6, 10, 15])
    #metoda najprej prepiše prvo vrednost tabele v začasno tabelo
    #sešteje prvi element v začasni tabeli in drugi element v podani tabeli
    #nato sešteje drugi element v začasni tabeli in tretji element v podani tabeli
>>> tabela = numpy.array([[1,2,3,4,5],[1,2,3,4,5]])
>>> numpy.cumsum(tabela)
    array([ 1,  3,  6, 10, 15, 16, 18, 21, 25, 30])
>>> numpy.cumsum(tabela,axis = 1)
    array([[ 1,  3,  6, 10, 15],
           [ 1,  3,  6, 10, 15]])
>>> numpy.cumsum(tabela,axis = 0, dtype=float)
    array([[  1.,   2.,   3.,   4.,   5.],
           [  2.,   4.,   6.,   8.,  10.]])

13. numpy.diagonal(a,offset=0,axis1=0,axis2=1)

Metoda vrne željeno diagonalo tabele.

Metoda za parameter a sprejme poljubno veliko tabelo, za parameter offset sprejme vrednost odmika od glavne diagonale ( vrednost je lahko pozitivna ali negativna ).

Primer:

>>> tabela = numpy.array([[2,0,0],[0,1,0],[0,0,5]])
>>> numpy.diagonal(tabela)
    array([2, 1, 5])
>>> numpy.diagonal(tabela,offset=1)
    array([0, 0])

Metode na tabelah

14. numpy.dot(a,b, out=None)

Metoda vrne skalarni produkt dveh tabel.

Metoda za parameter a in b sprejme dve enako dolgi tabeli. Parameter "out" pa sprejme prvotno tabelo ali pa tabelo z enakimi dimenzijami v katero shrani končno tabelo. Pri tem se podana tabela spremeni.

Primer:

>>> numpy.dot(numpy.array([1,2,3]), numpy.array([4,5,6]))
    32
>>> numpy.dot([1,2,3],[4,5,6])
    32

15. numpy.mean(a,axis=None, dtype=None,out=None)

Metoda vrne povprečno vrednost vrstic ali stolpcev.

Metoda za parameter a sprejme poljubno veliko tabelo. Pri parametru axis določim os na kateri se bo izvedla operacija. Axis sprejme vrednost , ali . Pri vrednosti nam obravnava posamezne vrstice tabele, pri vrednosti nam obravnava stolpce in pri vrednosti pa nam združi vse elemente v eno vrstico in jih nato obravnava. Parameter "out" pa sprejme prvotno tabelo ali pa tabelo z enakimi dimenzijami v katero shrani končno tabelo. Pri tem se podana tabela spremeni.

Primer:

>>> tabela = numpy.array([1,2,3,4,5])
>>> numpy.mean(tabela)
    3.0
    #metoda nam sešteje vrednosti tabele
    #dobljeno vsoto nato deli s številom elementov
>>> tabela = numpy.array([[1,2,3,4,5],[6,7,8,9,10]])
>>> numpy.mean(tabela)
    5.5
>>> numpy.mean(tabela,axis=0)
    array([ 3.5,  4.5,  5.5,  6.5,  7.5])
>>> numpy.mean(tabela,axis=1)
    array([ 3.,  8.])

Metode na tabelah

16. numpy.prod(a,axis=None, dtype=None,out=None)

Metoda vrne produkt vseh elementov vrstic ali stolpcev.

Metoda za parameter a sprejme poljubno veliko tabelo. Pri parametru axis določim os na kateri se bo izvedla operacija.Axis sprejme vrednost , ali . Pri vrednosti nam obravnava posamezne vrstice tabele, pri vrednosti nam obravnava stolpce in pri vrednosti pa nam združi vse elemente v eno vrstico in jih nato obravnava. Parameter "out" pa sprejme prvotno tabelo ali pa tabelo z enakimi dimenzijami v katero shrani končno tabelo. Pri tem se podana tabela spremeni.

Primer:

>>> tabela = numpy.array([1,2,3,4,5])
>>> numpy.prod(tabela)
    120
>>> tabela = numpy.array([[1,2,3,4,5],[6,7,8,9,10]])
>>> numpy.prod(tabela)
    3628800
>>> numpy.prod(tabela,axis=0)
    array([ 6, 14, 24, 36, 50])
>>> numpy.prod(tabela,axis=1)
    array([  120, 30240])

Metode na tabelah

17. numpy.put(a,ind,v,mode="raise")

Metoda vrine v podano tabelo vrednosti pri določenih indeksih. Pri tem se ne ustvari kopija tabele.

Metoda za parameter a sprejme poljubno veliko tabelo. Pri tem sprejme še dva parametra ind in v . Pri ind podamo indekse elemetnov za tabelo a . Pri parametru v pa podamo elemente, ki jih bomo vrinili v tabelo a . Pri parametru mode metodi povemo kako naj se obnaša, če uporabimo neobstoječi indeks. Obstajajo tri vrste načinov:

  • raise : sproži napako
  • wrap : vrednost ovije okoli
  • clip : vrednost postavi na konec

Primer:

>>> tabela = numpy.array([1,2,3,4,5])
>>> numpy.put(tabela,2,10)
>>> tabela
    array([ 1,  2, 10,  4,  5])
>>> numpy.put(tabela,10,42,mode="clip")
>>> tabela
    array([ 1,  2, 10,  4, 42])
>>> numpy.put(tabela,10,42,mode="wrap")
>>> tabela
    array([42,  2, 10,  4, 42])
>>> tabela = numpy.array([1,2,3,4,5])
>>> numpy.put(tabela,[0,3,4],10)
>>> tabela
    array([10,  2,  3, 10, 10])
>>> numpy.put(tabela,[0,3,4],[40,41,42])
>>> tabela
    array([40,  2,  3, 41, 42])

Metode na tabelah

18. numpy.repeat(a,repeats,axis=None)

Metoda vrne tabelo pri kateri se elementi ponovijo.

Metoda za parameter a sprejme poljubno veliko tabelo. Parametru repeats podamo število ponovitev vsake vrednosti v tabeli. Pri parametru axis pa določim os na kateri se bo izvedla operacija.Axis sprejme vrednost , ali . Pri vrednosti nam obravnava posamezne vrstice tabele, pri vrednosti nam obravnava stolpce in pri vrednosti pa nam združi vse elemente v eno vrstico in jih nato obravnava.

Primer:

>>> tabela = numpy.array([1,2,3,4,5])
>>> numpy.repeat(tabela,3)
    array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5])
>>> tabela = numpy.array([[1,2,3,4,5],[6,7,8,9,10]])
>>> numpy.repeat(tabela,2)
    array([ 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9,
        9, 10, 10])
>>> numpy.repeat(tabela,2,axis=0)
    array([[ 1,  2,  3,  4,  5],
           [ 1,  2,  3,  4,  5],
           [ 6,  7,  8,  9, 10],
           [ 6,  7,  8,  9, 10]])
>>> numpy.repeat(tabela,2,axis=1)
    array([[ 1,  1,  2,  2,  3,  3,  4,  4,  5,  5],
           [ 6,  6,  7,  7,  8,  8,  9,  9, 10, 10]])

Metode na tabelah

19. numpy.reshape(a,newshape,order="C")

Metoda preoblikuje tabelo v željeno obliko.

Metoda za parameter a sprejme poljubno veliko tabelo. Za parameter newshape pa dobi vrednost ali terko, ki določa novo obliko.

Primer:

>>> tabela = numpy.array([1,2,3,4])
>>> numpy.reshape(tabela,(2,2))
    array([[1, 2],
           [3, 4]])
>>> tabela = numpy.array([[1,2,3,4,5],[6,7,8,9,10]])
>>> numpy.reshape(tabela,10)
    array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])
>>> numpy.reshape(tabela,(5,2))
    array([[ 1,  2],
           [ 3,  4],
           [ 5,  6],
           [ 7,  8],
           [ 9, 10]])

Metode na tabelah

20. numpy.resize(a,newshape)

Metoda ustvari novo tabelo na podlagi podane tabele in oblike.

Metoda za parameter a sprejme poljubno veliko tabelo. Za parameter newshape pa dobi vrednost ali terko, ki določa novo obliko.

Primer:

>>> tabela = numpy.array([1,2,3,4])
>>> numpy.resize(tabela,(2,2))
    array([[1, 2],
           [3, 4]])
>>> tabela = numpy.resize(tabela,(2,2))
>>> numpy.resize(tabela,(4,1))
    array([[1],
           [2],
           [3],
           [4]])
>>> numpy.resize(tabela,(1,3))
    array([[1, 2, 3]])
>>> numpy.resize(tabela,(1,4))
    array([[1, 2, 3, 4]])

21. numpy.sum(a,axis=None,dtype=None,out=None)

Metoda vrne vsoto vseh vrednosti pri podani osi.

Metoda za parameter a sprejme poljubno veliko tabelo. Pri parametru axis določim os na kateri se bo izvedla operacija. Axis sprejme vrednost , ali . Pri vrednosti nam obravnava posamezne vrstice tabele, pri vrednosti nam obravnava stolpce in pri vrednosti pa nam združi vse elemente v eno vrstico in jih nato obravnava. Parameter "out" pa sprejme prvotno tabelo ali pa tabelo z enakimi dimenzijami v katero shrani končno tabelo. Pri tem se podana tabela spremeni.

Primer:

>>> tabela = numpy.array([1,2,3,4,5])
>>> numpy.sum(tabela)
15
>>> tabela = numpy.array([[1,2,3,4,5],[6,7,8,9,10]])
>>> numpy.sum(tabela)
55
>>> numpy.sum(tabela,axis=0)
array([ 7,  9, 11, 13, 15])
>>> numpy.sum(tabela,axis=1)
array([15, 40])

Metode na tabelah

22. numpy.swapaxes(a,axis1,axis2)

Metoda zamenja poljubni osi.

Metoda za parameter a sprejme poljubno veliko tabelo. Za parametra axis1 in axis2 pa sprejme indeks dveh osi, ki jih želimo zamenjati.

Primer:

>>> tabela = numpy.array([[1,2,3,4,5]])
>>> numpy.swapaxes(tabela,1,0)
    array([[1],
           [2],
           [3],
           [4],
           [5]])

23. numpy.transpose(a,axis=None) ali tabela.T

Metoda transponiran podano tabelo.

Metoda za parameter a sprejme poljubno veliko tabelo. Pri parametru axis pa določim os na kateri se bo izvedla operacija. Axis sprejme vrednost , ali . Pri vrednosti nam obravnava posamezne vrstice tabele, pri vrednosti nam obravnava stolpce in pri vrednosti pa nam združi vse elemente v eno vrstico in jih nato obravnava.

Primer:

>>> tabela = numpy.array([[1,2],[3,4]])
>>> numpy.transpose(tabela)
    array([[1, 3],
           [2, 4]])
>>> tabela.T
    array([[1, 3],
           [2, 4]])

Metode na tabelah

24. tabela.fill(value)

Metoda zapolni tabelo s podano vrednostjo.

Metoda za parameter value dobi vrednost, s katero bo nadomestila vse vrednosti v tabeli.

Primer:

>>> tabela
    array([[1, 2],
           [3, 4]])
>>> tabela.fill(42)
>>> tabela
    array([[42, 42],
           [42, 42]])

Kako ustvarimo matriko?

Matriko lahko ustvarimo na več različnih načinov. Najbolj osnovni način je z razredom matrix . Pri tem lahko matriko podamo kot v Matlab-u. Vendar pri NumPy-ju moramo zapis matrike podati v obliki niza.

Lahko pa matriko podamo tako kot pri tabelah, z oglatimi oklepaji.

>>> a = numpy.matrix("1 2;3 4")
>>> print a
    [[1 2]
     [3 4]]
>>> a
    matrix([[1, 2],
            [3, 4]])
>>> numpy.matrix([[1,2],[3,4]])
    matrix([[1, 2],
            [3, 4]])
>>> b = numpy.matrix([[1,2],[3,4]])
>>> print b
    [[1 2]
     [3 4]]
>>> b
    matrix([[1, 2],
            [3, 4]])


Drugi načini

Več o matrikah: Klik

Kako ustvariti matriko: ostali načini

numpy.asmatrix(data, dtype=None)

NumPy nam omogoča pretvorbo tabele v matriko. To naredimo s pomočjo ukaza asmatrix .

Metoda za prvi parameter sprejme poljubno veliko tabelo. Parameter dtype nam omogoča, da vrednostim spremenimo v drugi tip (float, int,...)

Primer:

>>> a = numpy.array([[1,2,3],[4,5,6],[7,8,9]])
>>> numpy.asmatrix(a)
    matrix([[1, 2, 3],
            [4, 5, 6],
            [7, 8, 9]])

numpy.bmat(obj)

Matriko lahko sestavimo tudi iz drugih matrik. To naredimo z metodo bmat , ki sprejme seznam matrik in vrne sestavljeno matriko.

Metoda sprejme za parameter tabelo z matrikami, ki so objekti ustvarjeni z ukazom numpy.matrix ali numpy.asmatrix .

Primer:

>>> a = numpy.array([[1,2],[3,4]])
>>> b = numpy.array([[5,6],[7,8]])
>>> numpy.bmat([[a,b],[b,a]])
    matrix([[1, 2, 5, 6],
            [3, 4, 7, 8],
            [5, 6, 1, 2],
            [7, 8, 3, 4]])

Kako ustvarimo matriko?

Lahko pa ustvarimo celotno matriko brez vnašanje posameznih stolpcev in vrstic.

Metode, ki nam omogočajo takšno dejanje se nahajajo v modulu matlib , znano tudi pod imenom matrix library .

Pred začetkom bomo iz knjižnice NumPy uvozili modul matlib . To naredimo z ukazom

import numpy.matlib

Kako ustvarimo matriko?

1. numpy.matlib.zeros(shape, dtype = None, order = "C")

Metoda ustvari poljubno veliko ničelno matriko.

Metoda za prvi parameter sprejem terko, v kateri napišemo koliko vrstic in stolpec želimo imeti v matriki. S parametrom dtype pa določimo vrednostim vrsto zapisa.

Primer:

>>> numpy.matlib.zeros((3,3))
    matrix([[ 0.,  0.,  0.],
            [ 0.,  0.,  0.],
            [ 0.,  0.,  0.]])

2. numpy.matlib.ones(shape, dtype = None, order = "C")

Metoda ustvari poljubno veliko matriko s samimi enkami.

Metoda za prvi parameter sprejem terko, v kateri napišemo koliko vrstic in stolpec želimo imeti v matriki. S parametrom dtype pa določimo vrednostim vrsto zapisa.

Primer:

>>> numpy.matlib.ones((3,3))
    matrix([[ 1.,  1.,  1.],
            [ 1.,  1.,  1.],
            [ 1.,  1.,  1.]])

Kako ustvarimo matriko?

3. numpy.matlib.eye(n, M=None, k=0, dtype=<type 'float'>)

Metoda ustvari poljubno veliko identično matriko.

Metoda za prvi parameter n sprejme število vrstic, za drugi parameter M pa število stolpec. Če vrednost M ni podana, nam metoda nastavi parameter M na vrednost n . Parameter k sprejme poljubno celo število, ki določi na kateri diagonali želimo enke. S parametrom dtype pa določimo vrednostim vrsto zapisa.

Primer:

>>> numpy.matlib.eye(3)
    matrix([[ 1.,  0.,  0.],
            [ 0.,  1.,  0.],
            [ 0.,  0.,  1.]])

>>> numpy.matlib.eye(3,3,2)
    matrix([[ 0.,  0.,  1.],
            [ 0.,  0.,  0.],
            [ 0.,  0.,  0.]])
>>> numpy.matlib.eye(3,3,1)
    matrix([[ 0.,  1.,  0.],
            [ 0.,  0.,  1.],
            [ 0.,  0.,  0.]])

4. numpy.matlib.identity(n)

Metoda nam ustvari poljubno veliko identično matriko.

Metoda prejme za parameter n velikost matrike.

Primer:

>>> numpy.matlib.identity(3)
matrix([[ 1.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  1.]])

Kako ustvarimo matriko?

5. numpy.matlib.rand(*args)

Metoda ustvari poljubno veliko matriko z naljučnimi vrednostimi med .

Metoda lahko sprejem n argumetnov, ki določajo obliko matrike. Če je prvi argument terka, potem se ostali argumenti ne upoštevajo. Terka določa končno obliko matrike. Drugače vsak argument določa velikost ene dimenzije.

Primer:

>>> numpy.matlib.rand(3)
    matrix([[ 0.94464715,  0.88921184,  0.54982287]])
>>> numpy.matlib.rand(3,4)
    matrix([[ 0.81208408,  0.55361335,  0.96359771,  0.20250231],
            [ 0.14429744,  0.04713728,  0.10604988,  0.97493172],
            [ 0.15029632,  0.32985688,  0.65041918,  0.97108828]])

Metode iz linearne algebre

Knjižnica NumPy imam tudi posebni modul, ki vsebuje metode iz linearne algebre. Modul se imenuje linalg in ga uvozimo s pomočjo ukaza :

import numpy.linalg

Več o modulu numpy.linalg : Klik

1. numpy.linalg.eigh(a, UPLO="L")

Metoda vrne lastne vrednosti in lastne vektorje realno simetrične matrike ali kompleksne hermitske matrike.

Metoda za prvi parameter a sprejme realno simetrično matriko ali kompleksno hermitsko matriko. Parameter UPLO pa določa ali se bo algoritem izvedel na spodnjem trikotnem ali zgornjem trikotnem delu.

Primer:

>>> tabela = numpy.array([[1,3,0],[3,2,6],[0,6,5]])
>>> lastVred, lastVekt = numpy.linalg.eigh(tabela)
>>> lastVred
array([ -3.8899916 ,   1.81086861,  10.07912299])
>>> lastVekt
array([[-0.45327654, -0.86657291,  0.20878645],
       [ 0.73883948, -0.23422559,  0.63186596],
       [-0.49865479,  0.44066969,  0.74642724]])

2. numpy.linalg.eig(a)

Metoda vrne lastne vrednosti in lastne vektorje poljubne matrike.

Metoda za parameter a sprejme poljubno veliko matriko.

Primer:

>>> tabela = numpy.array([[1,3,0],[3,2,6],[0,6,5]])
>>> lastVred, lastVekt = numpy.linalg.eigh(tabela)
>>> lastVred
    array([ -3.8899916 ,   1.81086861,  10.07912299])
>>> lastVekt
    array([[-0.45327654, -0.86657291,  0.20878645],
           [ 0.73883948, -0.23422559,  0.63186596],
           [-0.49865479,  0.44066969,  0.74642724]])

Metode iz linearne algebre

3. numpy.linalg.eigvals(a)

Metoda vrne lastne vrednosti matrike.

Metoda za parameter a sprejme poljubno veliko matriko in vrne njene lastne vrednosti.

Primer:

>>> tabela = numpy.array([[3,1],[1,3]])
>>> numpy.linalg.eigvals(tabela)
    array([ 4.,  2.])

4. numpy.linalg.eigvalsh(a,UPLO="L")

Metoda vrne lastne vrednosti realno simetrične matrike ali kompleksne hermitske matrike.

Metoda za prvi parameter a sprejme realno simetrično matriko ali kompleksno hermitsko matriko. Parameter UPLO pa določa ali se bo algoritem izvedel na spodnjem trikotnem ali zgornjem trikotnem delu.

Primer:

>>> tabela = numpy.array([[1,3,0],[3,2,6],[0,6,5]])
>>> numpy.linalg.eigvalsh(tabela)
    array([ -3.8899916 ,   1.81086861,  10.07912299])

Metode iz linearne algebre

5. numpy.linalg.norm(x, ord=None)

Metoda sprejme vektor ali matriko in vrne normo.

Metoda za prvi parameter x sprejme vektor ali matriko v obliki tabele. S pomočjo parametra ord določimo kakšno normo želimo izračunati:

  • fro : Frobeniusova norma Več na spletni strani
  • inf : maksimalno vrednost seznama z vsoto vrednosti stolpec.
  • -inf : minimalno vrednost seznama z vsoto vrednosti stolpec.
  • 0 : 0-norma
  • 1 : 1-norma
  • 2 : 2-norma

Primer:

>>> tabela = numpy.array([[3,5,7],[2,6,4],[0,2,8]])
>>> numpy.linalg.norm(tabela)
    14.387494569938159
>>> numpy.linalg.norm(tabela,numpy.inf)
    15
>>> numpy.linalg.norm(tabela,-numpy.inf)
    10
>>> numpy.linalg.norm(tabela,1)
    19
>>> numpy.linalg.norm(tabela,2)
    13.686302989309274

Metode iz linearne algebre

6. numpy.linalg.det(a)

Metoda sprejme poljubno matriko in vrne njeno determinanto.

Primer:

>>> numpy.linalg.det(numpy.matlib.identity(4))
    1.0

7. numpy.linalg.matrix_power(M,n)

Metoda sprejme kvadratno matriko M in vrne matriko potence reda .

Primer:

>>> numpy.linalg.matrix_power(numpy.array([[1,2],[3,4]]),2)
    array([[ 7, 10],
           [15, 22]])
>>> numpy.linalg.matrix_power(numpy.array([[1,2],[3,4]]),3)
    array([[ 37,  54],
           [ 81, 118]])

8. numpy.linalg.solve(a,b)

Metoda reši sistem linearnih enačb.

Metoda za parameter a sprejme tabelo s koeficienti. Parameter b pa sprejme tabelo z vrednostimi posamezne enačbe.

Primer:

>>> a = numpy.array([[1,1,-1],[0,1,2],[0,0,1]])
>>> b = numpy.array([3,1,-1])
>>> numpy.linalg.solve(a,b)
    array([-1.,  3., -1.])

9. numpy.linalg.inv(a)

Metoda sprejme kvadratno matriko in izračuna njen inverz.

Primer:

>>> a = numpy.array([[0,1,2],[-1,0,0],[2,-1,2]])
>>> numpy.linalg.inv(a)
array([[ 0.  , -1.  ,  0.  ],
       [ 0.5 , -1.  , -0.5 ],
       [ 0.25,  0.5 ,  0.25]])

Naključna števila

Knjižnica NumPy vsebuje modul, ki nam omogoča izvajanje simulacij za izračun verjetnosti ali za izbor naključnega vzorca. Modul se imenjuje numpy.random , vendar to ni modul random , ki je vključen v standardno knjižnico Python-a. Pred začetkom dela je potrebno modul uvoziti:

import numpy.random

Več o modulu numpy.random :Klik

Začeli bomo najprej z metodami, ki smo jih srečali že v standarni knjižnici Python-a in nadaljevali z metodami, ki jih srečamo pri verjetnosti.

1. numpy.random.rand(d0,d1,...,dn)

Metoda rand vrne tabelo z naključno izbranimi vrednostimi med

Metoda lahko sprejme parametrov, ki določajo obliko tabele.

Primer:

>>> numpy.random.rand()
    0.33214441264355843
>>> numpy.random.rand(1)
    array([ 0.70257484])
>>> numpy.random.rand(1,2)
    array([[ 0.18265868,  0.88088521]])
>>> numpy.random.rand(2,2)
    array([[ 0.15164074,  0.47125119],
           [ 0.12858889,  0.3592986 ]])
>>> numpy.random.rand(2,2,2)
    array([[[ 0.97227388,  0.64793783],
            [ 0.3996795 ,  0.8655011 ]],

           [[ 0.70868444,  0.6301229 ],
            [ 0.33958788,  0.02803011]]])
>>> numpy.random.rand(2,2,4)
    array([[[ 0.0705874 ,  0.77115014,  0.68492037,  0.77577225],
            [ 0.632392  ,  0.18484044,  0.05193567,  0.98019458]],

           [[ 0.89736138,  0.73206379,  0.0848014 ,  0.79503964],
            [ 0.29688802,  0.33832686,  0.84487513,  0.19805692]]])

Naključna števila

2. numpy.random.randint(low, high=None, size=None)

Metoda ustvari poljubno veliko tabelo z naključnimi vrednostnimi med spodnjo in zgornjo mejo. Pri tem spodnja meja ni vključena v interval.

Metoda za prvi parameter low sprejme spodnjo mejo. Parameter high določa zgornjo mejo intervala. Če ta ni podan, metoda parameter low nastavi na 0, high pa na vrednost parametra low . Size določa velikost tabele kjer lahko podamo vrednost parametra kot terko ali pa kot celo število.

Primer:

>>> numpy.random.randint(2)
    0
>>> numpy.random.randint(2)
    1
>>> numpy.random.randint(0,10)
    7
>>> numpy.random.randint(0,10,5)
    array([7, 0, 1, 3, 7])
>>> numpy.random.randint(0,10,(2,3))
    array([[0, 4, 9],
           [2, 8, 6]])
>>> numpy.random.randint(0,10,(5,3))
    array([[0, 8, 9],
           [5, 9, 8],
           [0, 2, 3],
           [4, 0, 9],
           [8, 8, 6]])

Naključna števila

3. numpy.random.random_integers(low, high=None, size=None)

Metoda ustvari poljubno veliko tabelo z naključnimi vrednostnimi med spodnjo in zgornjo mejo. Pri tem sta obe meji vključeni v interval.

Metoda za prvi parameter low sprejme spodnjo mejo. Parameter high določa zgornjo mejo intervala. Če ta ni podan, metoda parameter low nastavi na 1, high pa na vrednost parametra low . Parameter Size določa velikost tabele kjer lahko podamo vrednost parametra kot terko ali pa kot celo število.

Primer:

>>> numpy.random.random_integers(2)
    1
>>> numpy.random.random_integers(1,2,5)
    array([2, 1, 1, 1, 2])
>>> numpy.random.random_integers(1,10,(5,3))
    array([[10,  8,  9],
           [ 3,  3,  3],
           [10,  5, 10],
           [ 3,  6,  7],
           [ 5,  6,  4]])

Naključna števila

5. numpy.random.shuffle(x)

Metoda premeša elemente v tabeli.

Metoda za prvi parameter x sprejme poljubno veliko tabelo, ki jo nato premeša. Pri tem se tabela ne kopira, ampak se spremeni vrednost tabele, ki je shranjena v poljubni spremenljivki.

Primer:

>>> tabela = numpy.array([1,2,3,4,5])
>>> numpy.random.shuffle(tabela)
>>> tabela
    array([2, 3, 4, 5, 1])
>>> tabela = numpy.array([[1,2],[3,4],[5,6],[7,8],[9,10]])
>>> tabela
    array([[ 1,  2],
           [ 3,  4],
           [ 5,  6],
           [ 7,  8],
           [ 9, 10]])
>>> numpy.random.shuffle(tabela)
>>> tabela
    array([[ 5,  6],
           [ 3,  4],
           [ 7,  8],
           [ 1,  2],
           [ 9, 10]])

Naključna števila

6. numpy.random.permutation(x)

Metoda naključno premeša vse elemente tabele.

Metoda dobi za parameter x tabelo ali naravno število. Če metoda dobi tabelo, naključno premeša tabelo. Če pa dobi naravno števila, pa ustvari tabelo od 0 do podanega naravnega števila in jo naključno premeša. Pri tem vrne le eno permutacijo.

Primer:

>>> numpy.random.permutation(5)
    array([3, 2, 0, 4, 1])
>>> numpy.random.permutation([1,2,3,4])
    array([2, 4, 1, 3])
>>> tabela = numpy.array([[1,2],[3,4],[5,6],[7,8],[9,10]])
>>> numpy.random.permutation(tabela)
    array([[ 3,  4],
           [ 1,  2],
           [ 7,  8],
           [ 9, 10],
           [ 5,  6]])

Naključna števila

7. numpy.random.binomial(n, p, size=None)

Metoda vrne vzorec iz binomske porazdelitve.

Metoda za prvi parameter n sprejme naravno število, ki predstavlja število poskusov. Število moramo podati v float zapisu. Drugi parameter p določa verjetnost, da bo poskus uspel. Zadnji parameter size določa velikost vzorca.

Primer:

>>> numpy.random.binomial(12.0, 0.1)
    4
#Izračunaj verjetnost, da bo pri 3 kratnem metu kocke, 3 padla vsaj enkrat. Poskus ponovi 100000 krat.
>>> sum(numpy.random.binomial(3,.16,100000)==2)/100000.
    0.064390000000000003

8. numpy.random.geometric(p, size=None)

Metoda vrne vzorec iz geometrijske porazdelitve.

Metoda za prvi parameter p sprejme verjetnost, da se bo dogodek zgodil. Pri drugem parameteru size pa določimo velikost vzorca.

Primer:

>>> numpy.random.geometric(0.5,10000)
    array([9, 1, 1, ..., 3, 2, 1])
>>> numpy.random.geometric(0.5,(10,10))
    array([[1, 3, 4, 2, 2, 1, 5, 1, 4, 4],
           [1, 1, 2, 2, 3, 3, 1, 2, 4, 1],
           [2, 1, 4, 1, 2, 2, 2, 2, 2, 2],
           [1, 4, 1, 2, 1, 1, 1, 1, 1, 1],
           [1, 1, 1, 1, 2, 2, 2, 1, 2, 2],
           [2, 4, 3, 1, 3, 2, 5, 1, 2, 1],
           [1, 4, 4, 1, 1, 1, 1, 2, 5, 1],
           [4, 1, 1, 1, 1, 1, 1, 1, 1, 1],
           [2, 2, 1, 4, 1, 2, 5, 3, 1, 2],
           [1, 2, 1, 5, 1, 1, 1, 1, 1, 1]])

Naključna števila

9. numpy.random.normal(loc=0.0, scale=1.0, size=None)

Metoda vrne vzorec iz normalne porazdelitve.

Metoda za prvi parameter loc dobi vrednost aritmetične sredine, za parameter scale dobi standarni odklon porazdelitve in za parameter size pa velikost vzorca.

Primer:

>>> numpy.random.normal()
    -0.25447828602430894
>>> numpy.random.normal(0,0.5)
    0.24136913694320392
>>> numpy.random.normal(0,0.5,10)
    array([ 0.3244346 , -0.53890606,  0.56662664,  0.09559229, -0.1749759 ,
    0.30481407,  0.18327261,  0.13461559,  0.64363605,  0.00416687])

10. numpy.random.poisson(lam=1.0, size=None)

Metoda vrne vzorec iz Poissonove porazdelitve.

Metoda za prvi parameter loc dobi vrednost lambde, ki mora biti večja ali enaka . Pri parametru size pa določimo velikost vzorca.

Primer:

>>> numpy.random.poisson()
    3
>>> numpy.random.poisson(2)
    4
>>> numpy.random.poisson(2,100)
    array([2, 5, 0, 1, 2, 4, 2, 1, 2, 4, 3, 1, 0, 4, 4, 3, 2, 1, 2, 2, 1, 4, 2,
       1, 4, 2, 2, 2, 3, 2, 0, 1, 1, 1, 0, 3, 1, 3, 0, 1, 2, 3, 1, 0, 3, 1,
       1, 2, 2, 1, 1, 1, 4, 5, 2, 0, 1, 1, 3, 1, 6, 4, 4, 0, 2, 1, 2, 3, 2,
       4, 1, 0, 1, 1, 1, 3, 3, 1, 2, 1, 1, 1, 0, 4, 1, 2, 1, 5, 1, 3, 0, 6,
       2, 2, 2, 2, 2, 2, 5, 6])
>>> numpy.random.poisson(2,(10,10))
    array([[2, 3, 2, 3, 1, 0, 1, 1, 4, 3],
           [0, 3, 0, 3, 1, 3, 3, 1, 6, 0],
           [2, 1, 4, 1, 0, 2, 2, 2, 1, 0],
           [0, 2, 2, 0, 2, 6, 2, 1, 2, 1],
           [1, 2, 3, 1, 2, 0, 2, 3, 3, 2],
           [1, 3, 3, 3, 5, 3, 2, 0, 1, 1],
           [1, 3, 3, 2, 3, 4, 0, 1, 2, 0],
           [5, 2, 2, 6, 2, 2, 1, 1, 1, 0],
           [1, 4, 3, 1, 2, 1, 0, 3, 3, 2],
           [4, 3, 2, 3, 2, 2, 1, 1, 0, 1]])

Kako ustvarimo polinom?

Polinom v NumPy-ju ustvarimo tako, da uporabimo razred Polynomial . Vrednosti koeficinetov podamo v obliki tabele, kjer prvi element označuje prosti člen, zadnji pa .

Torej numpy.polynomial.polynomial.Polynomial([a_0,a_1,...,a_n])

Na naslednji prosojnicah bomo obravnavali le osnove metode na navadnih polinomih.

Več o polinomih si preberite tukaj: Klik

Pred začetkom dela je potrebno uvoziti naslednji modul:

import numpy.polynomial.polynomial

Več o modulu numpy.polynomial :

Operacije na polinomih:

  • numpy.polynomial.polynomial.polyadd(c1, c2): Metoda sprejme dva polinoma in ju sešteje.
  • numpy.polynomial.polynomial.polysub(c1, c2): Metoda sprejme dva polinoma in ju odšteje.
  • numpy.polynomial.polynomial.polymul(c1, c2): Metoda sprejme dva polinoma in ju zmnoži.
  • numpy.polynomial.polynomial.polymulx(c): Metoda sprejme polinom in ga pomnoži z x.
  • numpy.polynomial.polynomial.polydiv(c1, c2): Metoda sprejme dva polinoma in ju deli.
  • numpy.polynomial.polynomial.polypow(c, pow, maxpower=None): Metoda sprejme polinom in ga potencira za vrednost parametra pow .

Metode na polinomih

1. polynomial.polyval(x, c)

Metoda vrne vrednost polinoma pri podani vrednosti x .

Opomba: Z metodo polyval se srečamo tudi v Matlab-u.

Metoda za prvi parameter x sprejme vrednost pri kateri želimo izračunati vrednost polinoma. Drugi parameter pa sprejme tabelo v kateri je shranjen polinom.

Primer:

>>> numpy.polynomial.polynomial.polyval(0,[1,2,3,4,5])
    1.0
>>> numpy.polynomial.polynomial.polyval(1,[1,2,3,4,5])
    15.0
>>> numpy.polynomial.polynomial.polyval(2,[1,2,3,4,5])
    129.0
>>> tabelaK = numpy.array([[1,2],[3,4]])
>>> numpy.polynomial.polynomial.polyval(tabelaK,[1,2,3,4,5])
    array([[   15.,   129.],
           [  547.,  1593.]])

2. polynomial.polyroots(c)

Metoda sprejme poljubno velik polinom in poišče njegove ničle.

Primer:

>>> numpy.polynomial.polynomial.polyroots([-1,0,1])
    array([-1.,  1.])
>>> numpy.polynomial.polynomial.polyroots([ 6.,  1., -4.,  1.])
    array([-1.,  2.,  3.])

Metode na polinomih

3. polynomial.polyfromroots(c)

Metoda sestavi polinom pri podanih ničlah.

Primer:

>>> numpy.polynomial.polynomial.polyfromroots([-1,2,3])
    array([ 6.,  1., -4.,  1.])

4. polynomial.polyder(c, m=1, scl=1, axis=0)

Metoda izračuna odvod podanega polinoma.

Metoda za prvi parameter c sprejme polinom, za drugi parameter sprejme celo število, ki metodi pove kolikokrat mora polinom odvajat. Parameter scl določa s katerim števil bo metoda po vsakem odvajanju polinom pomnožili. Zadnji parameter axis pa določa po kateri osi bo metoda polinom odvajala.

Primer:

>>> numpy.polynomial.polynomial.polyder([-1,2,3])
    array([ 2.,  6.])
>>> numpy.polynomial.polynomial.polyder([-1,0,1])
    array([ 0.,  2.])
>>> numpy.polynomial.polynomial.polyder([-1,0,1],2)
    array([ 2.])
>>> numpy.polynomial.polynomial.polyder([-1,0,1],2,3)
    array([ 18.])

Metode na polinomih

5. polynomial.polyint(c, m=1, k=[], lbnd=0, scl=1, axis=0)

Metoda integrira dani polinom.

Metoda za prvi parameter c sprejme poljubno velik polinom. Za drugi parameter m sprejme naravno številko, ki metodi pove kolikokrat naj integrira polinom. Pri parametru k določimo integracijsko konstanto. Če parameter k vsebuje seznam, potem bo po vsaki integraciji uporabil drugo konstanto. S parametrom lbnd določimo spodnjo mejo integrala.

Primer:

>>> numpy.polynomial.polynomial.polyint([-1,0,1])
    array([ 0.        , -1.        ,  0.        ,  0.33333333])
>>> numpy.polynomial.polynomial.polyint([-1,0,1],2)
    array([ 0.        ,  0.        , -0.5       ,  0.        ,  0.08333333])
>>> numpy.polynomial.polynomial.polyint([-1,0,1],1,3)
    array([ 3.        , -1.        ,  0.        ,  0.33333333])
>>> numpy.polynomial.polynomial.polyint([-1,0,1],2,k=[1,2])
    array([ 2.        ,  1.        , -0.5       ,  0.        ,  0.08333333])
>>> numpy.polynomial.polynomial.polyint([-1,0,1],2,[1,2],2)
    array([ 2.        ,  0.33333333, -0.5       ,  0.        ,  0.08333333])

Primeri

  • V Matlabu napišite funkcijo Matrika1(n, m), ki zgradi matriko reda , z elementi . Funkcija naj vrne matriko. Če je vhodni podatek samo , naj privzame .

Rešitev naloge Posnetek reševanja

  • Napiši program z grafičnem vmesnikom s katerim lahko izračunamo determinanto podane matrike!

Rešitev naloge Končni program

Končni program

(matDetGUI.png)

Posnetek reševanja

0%
0%