Ještě než začnene ujistěte se že víte, jak to funguje s importem knihoven.
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
.
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
vytvoří řadu čísel tak, aby jich byl požadovaný počet:
linspace(2,5,9)
array([ 2. , 2.375, 2.75 , 3.125, 3.5 , 3.875, 4.25 , 4.625, 5. ])
linspace(0,5,4)
array([ 0. , 1.66666667, 3.33333333, 5. ])
linspace(0,1,20)
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. ])
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í.
arange(5)
array([0, 1, 2, 3, 4])
arange(3,10)
array([3, 4, 5, 6, 7, 8, 9])
arange(10,20,0.2)
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])
vytvoří řadu nul nebo jedniček. Nezdá se to ale může to být někdy velice užitečné.
zeros(5)
array([ 0., 0., 0., 0., 0.])
ones(20)
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
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.
t=linspace(0,10,11)
print t
[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
print t[1:5]
[ 1. 2. 3. 4.]
print t[-1]
print t[-2]
print t[-3]
10.0 9.0 8.0
print t[5:-3]
[ 5. 6. 7.]
Ve výřezech lze prvky i přeskakovat:
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]
print t[0:20:3]
[ 0 3 6 9 12 15 18]
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í:
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]
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.
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.
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.]
print a*b
print a/b
[ 9. 16. 21. 24.] [ 0.11111111 0.25 0.42857143 0.66666667]
print a
print a+10
[ 1. 2. 3. 4.] [ 11. 12. 13. 14.]
print b
print b*3
[ 9. 8. 7. 6.] [ 27. 24. 21. 18.]
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ý logaritmuslog10
-- dekadický logaritmusexp
-- exponencíální funkcePokud 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()
.
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()