Ještě než začnene ujistěte se že víte, jak to funguje s importem knihoven.

Matplotlib -- základní myšlenky a postupy

První zásadou, kterou si musíme osvojit je, že se vždy pracuje se seznamem (řadou) čísel. Pracuje se s datovým typem numpy.array.

In [3]:
a = array([5,8,12,13,100,18,74])
print a
print "max:", a.max()
print "min: ", a.min()
print u"součet:", a.sum()
print u'dékla:', a.size
[  5   8  12  13 100  18  74]
max: 100
min:  5
součet: 230
dékla: 7

linspace

vytvoří řadu čísel tak, aby jich byl požadovaný počet:

In [2]:
linspace(2,5,9)
Out[2]:
array([ 2.   ,  2.375,  2.75 ,  3.125,  3.5  ,  3.875,  4.25 ,  4.625,  5.   ])

In [3]:
linspace(0,5,4)
Out[3]:
array([ 0.        ,  1.66666667,  3.33333333,  5.        ])
In [4]:
linspace(0,1,20)
Out[4]:
array([ 0.        ,  0.05263158,  0.10526316,  0.15789474,  0.21052632,
        0.26315789,  0.31578947,  0.36842105,  0.42105263,  0.47368421,
        0.52631579,  0.57894737,  0.63157895,  0.68421053,  0.73684211,
        0.78947368,  0.84210526,  0.89473684,  0.94736842,  1.        ])

arange

vytvoří řadu čísel, tak aby byl mezi nimi požadovaný rozestup. Zároveň se číslo, které je uvedeno jako horní mez v seznamu neoběví.

In [5]:
arange(5)
Out[5]:
array([0, 1, 2, 3, 4])
In [6]:
arange(3,10)
Out[6]:
array([3, 4, 5, 6, 7, 8, 9])
In [7]:
arange(10,20,0.2)
Out[7]:
array([ 10. ,  10.2,  10.4,  10.6,  10.8,  11. ,  11.2,  11.4,  11.6,
        11.8,  12. ,  12.2,  12.4,  12.6,  12.8,  13. ,  13.2,  13.4,
        13.6,  13.8,  14. ,  14.2,  14.4,  14.6,  14.8,  15. ,  15.2,
        15.4,  15.6,  15.8,  16. ,  16.2,  16.4,  16.6,  16.8,  17. ,
        17.2,  17.4,  17.6,  17.8,  18. ,  18.2,  18.4,  18.6,  18.8,
        19. ,  19.2,  19.4,  19.6,  19.8])

zeros, ones

vytvoří řadu nul nebo jedniček. Nezdá se to ale může to být někdy velice užitečné.

In [8]:
zeros(5)
Out[8]:
array([ 0.,  0.,  0.,  0.,  0.])
In [9]:
ones(20)
Out[9]:
array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.])

Nejen výřezy

S datovým typpem numpy.array lze pracovat jako s klasickým python senzamem, ale je možné provádět i mnohem pokročilejší operace.

In [10]:
t=linspace(0,10,11)
print t
[  0.   1.   2.   3.   4.   5.   6.   7.   8.   9.  10.]
In [11]:
print t[1:5]
[ 1.  2.  3.  4.]
In [12]:
print t[-1]
print t[-2]
print t[-3]
10.0
9.0
8.0
In [13]:
print t[5:-3]
[ 5.  6.  7.]

Ve výřezech lze prvky i přeskakovat:

In [14]:
t=arange(0,100,1)
print t
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99]
In [15]:
print t[0:20:3]
[ 0  3  6  9 12 15 18]
In [16]:
print t[::9]
[ 0  9 18 27 36 45 54 63 72 81 90 99]

Výřez je možné použít i k přiřazení:

In [17]:
t[::3]=0
print t
[ 0  1  2  0  4  5  0  7  8  0 10 11  0 13 14  0 16 17  0 19 20  0 22 23  0
 25 26  0 28 29  0 31 32  0 34 35  0 37 38  0 40 41  0 43 44  0 46 47  0 49
 50  0 52 53  0 55 56  0 58 59  0 61 62  0 64 65  0 67 68  0 70 71  0 73 74
  0 76 77  0 79 80  0 82 83  0 85 86  0 88 89  0 91 92  0 94 95  0 97 98  0]
In [18]:
t[20:]=7
print t
[ 0  1  2  0  4  5  0  7  8  0 10 11  0 13 14  0 16 17  0 19  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7]

Pokud vás to zajímá víc, podívejte se na knihovnu numexpr.

Matematické funkce

To co bychom v čistém Pythonu museli zdlouhavě řešit podmíkami a vnořenými cykly je pro numpy.array hračka: Pokud provedeme nějakou matematickou operaci, provádí se vždy s dvěma prvky, které jsou v seznamech na stejné pozici. Například u sčítání se sečte první prvek s první, druhý s druhým, třetí s třetím atd.

In [19]:
a=array([1.,2.,3.,4.])
b=array([9.,8.,7.,6.])
print a
print b
print a+b
[ 1.  2.  3.  4.]
[ 9.  8.  7.  6.]
[ 10.  10.  10.  10.]
In [20]:
print a*b
print a/b
[  9.  16.  21.  24.]
[ 0.11111111  0.25        0.42857143  0.66666667]
In [21]:
print a
print a+10
[ 1.  2.  3.  4.]
[ 11.  12.  13.  14.]
In [22]:
print b
print b*3
[ 9.  8.  7.  6.]
[ 27.  24.  21.  18.]
In [23]:
print a
print a**2
print a**3
[ 1.  2.  3.  4.]
[  1.   4.   9.  16.]
[  1.   8.  27.  64.]

Fungují samozřejmě běžné matematické funkce:

  • sin
  • cos
  • tan
  • log -- přirozený logaritmus
  • log10 -- dekadický logaritmus
  • exp -- exponencíální funkce

Kreslení

Pokud mám řadu hodnot na ose x a řadu hodnot na ose y, můžu je vinést do souřadnicového systému. K tomuto účelu slouží funkce plot().

In [17]:
x=linspace(0.1,4,20)
y=exp(x)/6.
z=log(x)
s=5*sin(x)
plot(x,y, 'x-',x,z, 'x-', x,s,'x-')
grid()
In [ ]: