{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "

Tömbök (numpy)

\n", "
\n", "\n", "\n", "Ebben a Notebookban bemutatjuk az tömböket illetve hogyan kell a pythonban adatfájlokat beolvasni." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%pylab inline " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Adattömbök, matematikai eszközök, adatfájlok kezelése\n", "\n", "A pythonban a **`numpy`** csomag felel az adatok beolvasásáért, matematikai operációk elvégezésért (mint a gyökvonás, szinusz ...)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Tömbök\n", "\n", "A programozásban létrehozhatunk mátrixokat, melyeket adattömböknek hívunk. Ezek bármennyi dimenziósak lehetnek." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "a = array([1, 2, 3]) # hozzunk létre egy 1 dimenziós tömböt\n", "print(type(a)) # Írassuk ki \"a\" típusát: \"\"\n", "print(a.shape) # Nézzük meg a formáját: \"(3,)\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**A python és a legtöbb programozási nyelv nullától kezdi a tömbök indexelését. Azaz az első elem indexe 0, a másodiké 1 és így tovább. Egy 10 elemű tömbnek az utolsó eleme 9-es indexet visel (Elemszám-1)!**\n", "\n", "Így kell elképzelni az adattömböket:\n", "\n", "\n", "


\n", "" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "print(a[0], a[1], a[2]) # Írassuk ki a tömb, első (0.-ik), második, ás harmadik elemét\n", "a[0] = 5 # Átírjuk az első (nulladik) elem értékét\n", "print(a) # Nézzük meg a megváltozott \"a\" vektort" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "b = array([[1,2,3],[4,5,6]]) # Készítsünk 2 dimenziós tömböt\n", "print(b.shape) # Kiíratjuk az alakját\n", "print(b[0, 0], b[0, 1], b[1, 0]) # Írjunk ki pár elemet a tömbből" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### \"Almátrixok\"\n", "\n", "A pythonban ki tudunk egy tömbből venni résztömböket. De vigyázzunk, mert a résztömbön végzett művelet a szülőtömb adott elemein is elvégződik." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ " # Készítsük els következő 2 dimenziós (3 sor, 4 oszlop) tömbböt\n", " # [[ 1 2 3 4]\n", " # [ 5 6 7 8]\n", " # [ 9 10 11 12]]\n", "a = array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])\n", "print(a[0, 1]) # Írassuk ki a 0. sor, 1. oszlopának elem(eit): 2\n", "\n", " # Hozzuk létre a mátrix következő almátrixát (ami 2*2 nagyságú)\n", " # [[2 3]\n", " # [6 7]]\n", " # Azaz az a mátrixból a 0-tól 2-ig levő adatokatsorok, illetve függőlegesen 1-tól 3-ig levő adatoszlopok\n", " # Vegyük észre, hogy a felső határ már nincs benne az adatsorban!\n", "b = a[0:2, 1:3]\n", "\n", " # Változtassuk meg a b mátrix [0,0]-ás elemének értékét\n", "b[0, 0] = 77\n", "\n", " # Ellenőrizzük az a mátrixban a \"b[0,0]\" helyen levő értéket (a[0,1]-as hely)\n", "print(a[0, 1]) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Számsorok generálása és tömbbe rendezése\n", "\n", "Lehetőség van adott hosszú sorokat gyártani, melyekből tömb készíthető. Nézzük néhány példát erre:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "a = arange(15) # Készítsünk egy 15 elemű listát \n", "print(a)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "a = arange(15) # Készítsünk egy 15 elemű listát \n", "a = a.reshape(3, 5) # Rendezzük a listát 3*5-s tömbbe\n", "a # Nézzük meg az eredményt" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "a.shape" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "a.size # Megadja mekkora a tömb mérete (mennyi adat van benne)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "a.ndim" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "type(a)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "a.dtype.name # Megnézi milyen tipusú adatok vannak a tömbben" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [], "source": [ "b = array([6.25, -0.25, 8.])\n", "b" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "type(b)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "b.dtype.name" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "c = array( [ [1,2], [3,4] ], dtype=complex )\n", "c" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "c.dtype.name" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "zeros( (3,4) ) #Készítsünk egy 3*4-es tömböt, mely tele van nullával" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "ones( (2,3,4), dtype=int16 ) # Készítsünk egy 3 dimenziós tömböt, csupa egyesből" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "a = arange(15, 100, 5) # Készítsünk egy listát 15-től, 100-ig, 5-sével \n", "print(a)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "arange( 30, 10, -5 )" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "arange( 10, 30, -5 ) #Ez üres lista, de NINCS hibaüzenet!!!" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "arange( 0, 2, 0.3 )" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "linspace( 0, 2, 9 ) # Készítsünk egy 9 elemű listát 0 és 2 között. Egyenlő lépésközzel." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Matematikai függvények\n", "\n", "Bővebb leírás itt található: https://docs.scipy.org/doc/numpy/reference/routines.math.html" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "x = linspace( 0, 2*pi, 100 ) # A pi-nek a neve \"pi\"\n", "x" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "f = sin(x) # vegyük az előbb generált adatsornak a szinuszát\n", "plot(f) # majd ábárzoljuk" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "plot(cos(x))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "plot(tan(x))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "plot(tanh(x))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "plot(arctan(x))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "B = arange(3)\n", "B" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "exp(B) # Emeljük \"e\"-adra a B elemeit" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "sqrt(B) # Gyökvonás neve 'sqrt'" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "C = array([2., -1., 4.])\n", "add(B, C) # Össze is adahatunk elemenként 2 tömbböt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Kétváltozós függvények ábrázolása (felületi ábrák)\n", "\n", "Ha kétváltozós függvényt szeretnénk ábrázolni, akkor ahhoz a mintavételezést a numpy csomag meshgrid() függvényével tehetjük meg az alábbi szintaxis szerint:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "xrange=linspace(-3,3,100) # határok és pontok száma az x irányba\n", "yrange=linspace(-3,3,100) # határok és pontok száma az y irányba\n", "x,y=meshgrid(xrange,yrange) # mintavételezés az x és y síkban" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Két változós függvényt a pcolor() matplotlib függvény segítségével tudunk ábrázolni. \n", "\n", "A fent definiált x és y tömbök segítségével például az\n", "$\n", "f(x,y)=e^{-(x^2+y^2)}\n", "$\n", "kétdimenziós Gauss-görbét az alábbi módon ábrázolhatjuk:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "pcolor(x,y,exp(-(x**2+y**2)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hogy egy adott szín mit jelent, azt a colorbar() függvény segítségével tudhatjuk meg." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "pcolor(x,y,exp(-(x**2+y**2)))\n", "colorbar()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Kétváltozós függvényeket szokás kontúrok segítségével is ábrázolni. Egy kontúrvonal azokat a pontokat tartalmazza, ahol az adott két változós függvény ugyanazt az értéket veszi fel. A contour() függvény segítségével tudunk kontúrábrákat generálni:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "contour(x,y,exp(-(x**2+y**2)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ha csak megadott kontúrértékekre vagyunk kíváncsiak, akkor azt a levels kulcsszó használatával tehetjük meg." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "contour(x,y,exp(-(x**2+y**2)), levels=linspace(0,1,20))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ábra mentése\n", "A legenerált ábrákat a savefig() paranccsal tudjuk kimenteni képfile-okba." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [], "source": [ "plot(x,y)\n", "savefig('az_en_abram.png')" ] } ], "metadata": { "hide_input": false, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" }, "latex_envs": { "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 0 }, "nav_menu": {}, "toc": { "navigate_menu": true, "number_sections": false, "sideBar": true, "threshold": 6, "toc_cell": false, "toc_section_display": "block", "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 0 }