Bevezetés a Python használatába

Hasonló dokumentumok
Imperatív programozás

Python tanfolyam Python bevezető I. rész

Informatika terméktervezőknek

INFORMATIKA javítókulcs 2016

Ismerkedés a Python programnyelvvel. és annak micropython változatával

Matlab alapok. Baran Ágnes

Imperatív programozás

Apple Swift kurzus 3. gyakorlat

Matlab alapok. Vektorok. Baran Ágnes

BASH script programozás II. Vezérlési szerkezetek

Python bevezető foglalkozás Python bevezető foglalkozás

2018, Diszkrét matematika

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Az Összetett hálózatok vizsgálata elektronikus tantárgy részletes követeleményrendszere

MATLAB alapismeretek I.

Gyakorló feladatok Gyakorló feladatok

Imperatív programozás

PYTHON. Avagy hosszú az út a BioPythonig

Programozási nyelvek Python

1. Egyszerű (primitív) típusok. 2. Referencia típusok

A C# PROGRAMOZÁSI NYELV

Vezérlési szerkezetek Vezérlési szerkezetek: feltételes elágazás és ciklusok

A MATLAB alapjai. Kezdő lépések. Változók. Aktuális mappa Parancs ablak. Előzmények. Részei. Atomerőművek üzemtana

INFORMATIKA tétel 2019

Szoftvertechnológia alapjai Java előadások

AWK programozás, minták, vezérlési szerkezetek

2016, Diszkrét matematika

Írjon olyan programot a standard könyvtár alkalmazásával, amely konzolról megadott valós adatokból meghatározza és kiírja a minimális értékűt!

A Python programozási nyelv

AWK programozás, minták, vezérlési szerkezetek

Programozás alapjai. 5. előadás

S z á m í t ó g é p e s a l a p i s m e r e t e k

Matlab alapok. Baran Ágnes. Baran Ágnes Matlab alapok Elágazások, függvények 1 / 15

Algoritmusok Tervezése. 1. Előadás MATLAB 1. Dr. Bécsi Tamás

Felvételi tematika INFORMATIKA

2016, Diszkrét matematika

Smalltalk 2. Készítette: Szabó Éva

Változók és adattípusok Változók és adattípusok

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

Megjegyzés: A programnak tartalmaznia kell legalább egy felhasználói alprogramot. Példa:

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Algoritmusok Tervezése. 4. Előadás Visual Basic 1. Dr. Bécsi Tamás

Python I. Vincze Dávid Miskolci Egyetem, IIT

A C# programozási nyelv alapjai

Maximum kiválasztás tömbben

2018, Diszkrét matematika

Programozási segédlet

A MATLAB alapjai. Kezdő lépések. Változók. Aktuális mappa Parancs ablak. Előzmények. Részei

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

C# feladatok gyűjteménye

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Számítógépes Hálózatok. 1. Gyakorlat

7. Strukturált típusok

2018, Diszkrét matematika

MATLAB OKTATÁS 1. ELŐADÁS ALAPOK. Dr. Bécsi Tamás Hegedüs Ferenc

Matematikai programok

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

3. Gyakorlat Ismerkedés a Java nyelvvel

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

Aradi Bernadett. 2017/18 ősz. TensorFlow konvolúciós hálózatokhoz 2017/18 ősz 1 / 11

Tuesday, March 6, 12. Hasító táblázatok

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

LEGO robotok. XII. rész

MATLAB. 3. gyakorlat. Mátrixműveletek, címzések

Hálózatok építése és üzemeltetése

A JavaScript főbb tulajdonságai

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Programozási nyelvek JAVA EA+GY 1. gyakolat

Occam 1. Készítette: Szabó Éva

2018, Diszkre t matematika. 10. elo ada s

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

Komputeralgebra Rendszerek

OOP: Java 1.Gy: Java alapok

SZERVER OLDALI JAVASCRIPT. 3. hét Javascript nyelvi elemek

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

1. Olvassuk be két pont koordinátáit: (x1, y1) és (x2, y2). Határozzuk meg a két pont távolságát és nyomtassuk ki.

Bevezetés a programozásba I.

1. Alapok. Programozás II

Matematikai programok

Programozás II. 2. Dr. Iványi Péter

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Előfeldolgozó rendszer Tömbök. Dr. Bécsi Tamás 4. Előadás

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Webprogramozás szakkör

BASH SCRIPT SHELL JEGYZETEK

Egész számok. pozitív egész számok: 1; 2; 3; 4;... negatív egész számok: 1; 2; 3; 4;...

Függvények Megoldások

A Python programozási nyelv

12. előadás. Egyenletrendszerek, mátrixok. Dr. Szörényi Miklós, Dr. Kallós Gábor

6. A Pascal nyelv utasításai

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

ELEMI PROGRAMOZÁSI TÉTELEK

Bevezetés a programozásba I.

Szövegek C++ -ban, a string osztály

Átírás:

Bevezetés a Python használatába Aradi Bernadett 2017/18 ősz Python bevezető 2017/18 ősz 1 / 31

Kurzusinformációk: https://arato.inf.unideb.hu/aradi.bernadett A kurzushoz tartozó jegyzet: https://gyires.inf.unideb.hu/gybitt/19/neuralis_halozatok_v8.pdf import this Python bevezető 2017/18 ősz 2 / 31

A Python adattípusai Számok: integer és float boolean: True, False string: print( Hello World! ) Az adattípusok dinamikusan (deklarálás nélkül) adódnak: type(1) type(1.2) type(1.) type("hello") # string: vagy type(none) type(int) Változók típusának konvertálása: str(17) int("17") float("2.5") float("1") Python bevezető 2017/18 ősz 3 / 31

Alapműveletek x=3 print(x) print(x + 2), +,-,*,/ print(x ** 2) x += 1 print(x) x *= 5 print(x) # hatványozás 7 // 3 # hányados egészrésze type: int 7 % 3 # osztási maradék Adhatunk értéket egyszerre több változónak: x,y=2,8 print(x*y) Python bevezető 2017/18 ősz 4 / 31

Indentálás Pythonban!! x=3 if x>1: x+=2 print(x) Kommentelés: 1-soros: # többsoros: """ előtte-utána Alt használatával: egyszerre több sor kijelölése (jupyter notebook) Változónevek: a z, A Z, 0 9, nem kezdődhetnek számmal case sensitive nem lehetnek az alábbiak: and assert break class continue def del elif else except exec finally for from global if import in is lambda not or pass print raise return try while yield Python bevezető 2017/18 ősz 5 / 31

Logikai operátorok t=true f=false print(type(t)) print(t and f) print(t or f) print(not t) print(t!= f) # XOR A bool típus interpretálható int-ként is: True==1 és False==0 1 == 1 3 * 2 == 7 2!= 2 3 * 2!= 7 1 < 5 3 >= 0 1 < 2 >= 3 Python bevezető 2017/18 ősz 6 / 31

Műveletek stringekkel x = "Hello, I m" x + "Python!" # Default: utf-8 karakterkódolás h = Hello w = "world" print(h) print(len(h)) # string hossza hw = h + + w +! # stringek összefűzése print(hw) "Do you have {no} of those {what}?".format(no= two,what= apples ) Do you have %d of those %s % (2, apples ) s="hello" indexelés: s[0], s[1],..., s[5] negatív indexelés: s[-1], s[-2],..., s[-5] s.capitalize(), s.upper(), s.rjust(7), s.center(9) s.replace( l, k ) world.strip() # eltünteti a szóközöket előtte-utána Python bevezető 2017/18 ősz 7 / 31

A Python objektumai listák: akár különböző típusú változók rögzített sorrendben szótárak (dictionary): (key,value) párokat rögzít halmazok osztályok (class): definiálhatunk egyéb típusokat függvények Python bevezető 2017/18 ősz 8 / 31

Listák lst = [3, 1, 2] print(lst,lst[2]) print(lst[-1]) lst[0]= start print(lst) lst.append(3) ls=ls.pop() # kiveszi a lista utolsó elemét print(ls,lst) empty=[] lst1=[0,1,2,3] lst2=[4,5,6] lst=lst1+lst2 print(lst) # listák összefűzése nums=list(range(7)) print(nums) # range: beépített fv egész számok sorozatára Python bevezető 2017/18 ősz 9 / 31

Slicing lists nums=list(range(7)) print(nums) print(nums[2:4]) # slice: 2 indexű elemtől 3-ig print(nums[2:]) print(nums[:4]) print(nums[:]) # teljes lista print(nums[:-1]) # az utolsó elemig print(nums[1:5:2]) # ez hogy jött ki? print(nums[4::-2]) # visszafelé is mehetünk print(nums[::-1]) stringekre ugyanígy! nums[2:4]=[100,101] print(nums) nums[2:4]=list(range(20)) print(nums) Python bevezető 2017/18 ősz 10 / 31

Listák... nums=list(range(7)) letters=[ a, b, c ] lst=[nums,letters] print(lst[1][2]) print(lst[1][:2]) len(nums), len(lst) len([]) len( python ) 8 in nums # in: ellenőrzi, hogy az elem benne van-e a listában t in python min(nums), max(nums) Python bevezető 2017/18 ősz 11 / 31

Listák rendezése lst = [25, 50, 10, -150, 28, 250, 310, 33] sorted(lst) # növekvő sorrend sorted(lst, reverse=true) Vektorok, mint szabályos sorozatok A range függvény segítségével: list(range(4)) list(range(4,10)) list(range(2, 12, 3)) list(range(-7, -37, -5)) # csökkenő sorrend Python bevezető 2017/18 ősz 12 / 31

for-ciklus egy lista elemei mentén hallgatok=[ Sanyi, Anna, Gábor ] for valaki in hallgatok: print(valaki, jár neurális gyakorlatra ) hallgatok=[ Sanyi, Anna, Gábor ] for idx, valaki in enumerate(hallgatok): # enumerate print(valaki, a névsor, idx+1,. tagja ) hallgatok=[ Sanyi, Anna, Gábor ] for idx, valaki in enumerate(hallgatok): print( %s a névsor %d. tagja % (valaki,idx + 1)) nums = [0, 1, 2, 3, 4] negyzet = [] for i in nums: negyzet.append(i ** 2) print(negyzet) Python bevezető 2017/18 ősz 13 / 31

Függvények Függvények definiálása: def parancs segítségével: def sign(x): if x > 0: return positive elif x < 0: return negative else: return zero for x in [-1, 0, 1]: print(sign(x)) Python bevezető 2017/18 ősz 14 / 31

Feladatok Álĺıtsuk elő minél egyszerűbben az alábbi vektorokat! 1 a = (0, 1,..., 30) 2 b = (2, 4, 6,..., 100) 3 c = (2, 1.9, 1.8,..., 0) 4 d = (0, 3, 6,..., 27, 30, 100, 30, 27,..., 6, 3, 0) 3. feladat megoldása: c = list(range(20,-1,-1)) c = [i/10 for i in c] print(c) Python bevezető 2017/18 ősz 15 / 31

Feladatok 2 Legyen v egy adott 100 elemű vektor. Ennek megadására egy lehetőség: from random import randint v=[randint(-500,500) for i in range(0,100)] print(v) 5 Álĺıtsuk elő azt a w vektort, melynek elemei a v elemei fordított sorrendben felsorolva! Írjunk függvényt, amely 6 egy adott n természetes szám esetén kíırja n! értékét; 7 egy adott természetes szám esetén eldönti, hogy az palindrom szám-e! Python bevezető 2017/18 ősz 16 / 31

NumPy Tömbök kezeléséhez, numerikus számításokhoz készült kiegészítő csomag a Pythonhoz. import numpy as np alapvető adatszerkezete az n-dimenziós tömb vektor és mátrix szintű utasítások lineáris algebrai és véletlenszám almodul több magasabb szintű modul is épül rá (pl. scipy, matplotlib, scikit-learn) Python bevezető 2017/18 ősz 17 / 31

Tömbök létrehozása konkrét adatokból Vektorok: v = np.array([1, 3, 2]) print(type(v)) print(v.shape) v[0]=5 print(v) Mátrixok: A = np.array([[1,2,3],[4,5,6]]) # sorfolytonosan mátrixot képez print(a.shape) A[0,1]=-100 print(a) import numpy as np helyett: from numpy import array v = array([1, 3, 2]) Python bevezető 2017/18 ősz 18 / 31

Speciális tömbök B = np.zeros((3,2)) C = np.ones((1,2)) D = np.full((2,5),7) E = np.eye(3) # csupa 0-ból álló mátrix # csupa egyesből álló mátrix # konstans mátrix # 3x3-as egységmátrix F = np.random.random((2,2)) # véletlen számok [0, 1]-en egyenletes eloszlásból Indexelés, slicing: mint a listáknál. DE: A = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]]) B = A[:2, 1:3] print(b) B[0, 0] = 1000 print(a) Python bevezető 2017/18 ősz 19 / 31

Még több slicing: amire figyelni kell... A = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]]) # a középső sor kiválasztása: sor1 = A[1, :] vagy sor2 = A[1:2, :] print(sor1) print(sor2) print(sor1,sor1.shape) print(sor2,sor2.shape) # ugyanaz? sor1 = A[1, :] integer indexing: csökkenti a tömb rangját sor2 = A[1:2, :] slicing: nem csökkenti a rangot Python bevezető 2017/18 ősz 20 / 31

Integer array indexing B = np.array([[1,2], [3, 4], [5, 6]]) print(b[[0, 1, 2], [0, 1, 0]]) print(np.array([b[0, 0], B[1, 1], B[2, 0]])) print(b[[0, 0], [1, 1]]) # tehát többször is választhatjuk ugyanazt az elemet C = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]]) v = np.array([0, 2, 0, 1]) print(c[np.arange(4), v]) # minden sorból egy elem # arange: NumPy range függvénye tömbökre C[np.arange(4),v] += 100 # minden sorból egy elemhez hozzáadunk 100-at print(c) Python bevezető 2017/18 ősz 21 / 31

Boolean array indexing Egy logikai feltétel ellenőrzésével történik az indexelés. C = np.array([[1,2], [3, 4], [5, 6]]) felt = (C > 1) # visszatérési érték: boolean NumPy tömb print(felt,felt.shape) print(c[felt]) # 1 rangú NumPy tömb vektor print(c[c>1]) # közvetlenül Adattípusok NumPy-ban: Mint korábban, itt is dinamikusan választ adattípust a Python. Ennek ellenére egy opcionális argumentummal ki is kényszeríthetünk bizonyos adattípus-választást: v = np.array([1, 2]) print(v.dtype) # típus: int32 v = np.array([1., 2]) print(v.dtype) # típus: float64 v = np.array([1, 2],dtype=np.float32) print(v.dtype) # típus: float32 Python bevezető 2017/18 ősz 22 / 31

Műveletek NumPy tömbökkel A tömbökkel végzett matematikai alapműveletek elemenként hajtódnak végre, és függvényként is meghívhatjuk őket: A = np.array([[1,2],[3,4]]) B = np.array([[5,6],[7,8]]) print(a+b) # mátrixösszeadás print(np.add(a,b)) print(a-b) # különbségképzés print(np.subtract(a,b)) print(a*b) # szorzás elemenként! print(np.multiply(a,b)) print(a/b) # osztás print(np.divide(a,b)) Egyéb matematikai függvények is elemenként: print(np.sqrt(a)) Mit kapunk, ha 0-val osztunk, vagy negatív számból vonunk négyzetgyököt? Python bevezető 2017/18 ősz 23 / 31

Belső/skaláris szorzat, mátrixszorzás A dot függvénnyel történik: A = np.array([[1,2],[3,4]]) B = np.array([[5,6],[7,8]]) v = np.array([9,10]) w = np.array([11, 12]) print(np.dot(v, w)) # v és w vektorok belső szorzata print(v.dot(w)) # ez is print(np.dot(a,v)) print(a.dot(v)) print(np.dot(v,a)) print(np.dot(a,b)) print(a.dot(b)) # A mátrix és v vektor szorzata # ez is # és ez? # mátrixszorzás # ez is Vegyük észre, hogy a NumPy nem tesz különbséget sor- és oszlopvektorok között! Python bevezető 2017/18 ősz 24 / 31

Ha mégis sor- és oszlopvektorokkal szeretnénk dolgozni: n 1 és 1 n típusú mátrixokra van szükségünk: v = np.array([9,10]) print(v==v.t) #.T: transzponálás v = np.array([[9,10]]) w = np.array([[9],[10]]) print(v.shape,w.shape) print(v==w) print(v==w.t) NumPy függvények # v sorvektor # v oszlopvektor A = np.array([[1,2],[3,4]]) print(np.sum(a)) # elemek összege print(np.sum(a, axis=0)) print(np.sum(a, axis=1)) # összeg oszloponként # összeg soronként Egyéb hasznos NumPy függvények: https://docs.scipy.org/doc/numpy/reference/routines.math.html Python bevezető 2017/18 ősz 25 / 31

Feladatok 3 1 Álĺıtsuk elő azt a 3 4-es mátrixot, mely sorfolytonosan tartalmazza az 1,...,12 elemek kétszereseit! (Hint: használjuk az np.reshape függvényt!) 2 Álĺıtsuk elő a csupa 1-esekből álló 3 5-ös mátrixot. 3 Álĺıtsuk elő azt az 5 3-as mátrixot, melynek átlójában az 1,2,3 elemek állnak, minden más eleme 0. 4 Keressük meg egy 6 8-as véletlen mátrix minden sorában a maximális elemet. (Hint: a mátrix megadásához használjuk ismét az np.reshape függvényt, valamint például a randint parancsot!) 5 Írjunk függvényt, amely egy adott n természetes szám esetén (for-ciklus használata nélkül) kíırja n! értékét! Python bevezető 2017/18 ősz 26 / 31

Broadcasting Különböző méretű NumPy tömbökkel végzett műveletvégzés esetén hasznos. Például tegyük fel, hogy egy rögzített vektort hozzá szeretnénk adni egy mátrix minden sorához: A = np.array([[1,2],[3,4],[5,6]]) v = np.array([2,1]) Megoldás: for-ciklussal broadcasting segítségével: print(a+v) elemenkénti műveletvégzés az ezt támogató függvények: univerzális függvények, lásd: https://docs.scipy.org/doc/numpy/reference/ufuncs.html Mit tegyünk, ha a w = np.array([1,1,3]) vektort szeretnénk hozzáadni A minden oszlopához? Python bevezető 2017/18 ősz 27 / 31

Broadcasting hogyan működik? 1 Ha a 2 tömb rangja nem egyezik meg: a kisebb rangú tömb shape-vektorának elejére annyi 1-est ír, hogy a rangok megegyezzenek. Pl. (3,1,4) és (2,) (3,1,4) és (1,1,2). 2 Két tömböt egy adott dimenzióban kompatibilisnek mondunk, ha a két tömb adott dimenziója megegyezik, vagy az egyik tömb esetén ez az érték 1. Pl. (3,1,4) és (1,1,2) az első 2 dimenziójukban kompatibilisek. 3 Két tömb akkor broadcastolható, ha minden dimenziójukban kompatibilisek. Pl. (3,1,4) és (1,1,2) nem broadcastolható. 4 Két tömb broadcastolása esetén mindkét tömb úgy viselkedik, mintha minden dimezióban a 2 lehetőség maximuma lenne az adott dimenzió mérete. Pl. (3,1,1) és (1,2,4) esetén: (3,2,4) 5 Ha valamelyik dimenzióban a két tömb mérete különböző, akkor az 1 méretűt annyiszor egymás után másolja, hogy a két tömbbel elemenként végezhessük a műveleteket. Python bevezető 2017/18 ősz 28 / 31

Függvényábrázolás Matplotlib: beépített könyvtár ábrák készítéséhez, ezen belül a matplotlib.pyplot egy függvényábrázolásra használható modul. import matplotlib.pyplot as plt Pl. a cos függvény ábrázolása egy tartományon: x = np.arange(0,3*np.pi,0.1) # pontok x koordinátája y = np.cos(x) # megfelelő y értékek kiszámolása plt.plot(x, y) plt.show() # ez a parancs teszi láthatóvá a grafikát Több függvény ábrázolása és feliratok készítése: y2 = np.sin(x) plt.plot(x, y, b ) plt.plot(x, y2, g: ) plt.xlabel( x-tengely ) plt.ylabel( y-tengely ) plt.title( cos és sin függvények ) plt.legend([ cos, sin ]) # jelmagyarázat készítése plt.show() Python bevezető 2017/18 ősz 29 / 31

Feladatok 4 1 Olvassuk be egy tömbbe a https://arato.inf.unideb.hu/baran.agnes/nh2017/elemek.txt címen található adatállományt! Erre egy lehetőség: import urllib.request url=... # ide kell a fenti link points = np.loadtxt(urllib.request.urlopen(url)) 2 Vizsgáljuk meg az adathalmazunk felépítését! 1-esekkel és -1-esekkel felcímkézett síkbeli pontok szerepelnek benne. Hány 1-es és hány -1-es jelzésű pontunk van? 3 Ábrázoljuk egy közös koordináta-rendszerben különböző színnel az 1-es, valamint a -1-es címkével rendelkező pontokat. Perceptronnal ketté fogjuk választani a 2 ponthalmazt. Előtte: 4 Tegyük rá az ábránkra a -2 meredekségű, 10-es tengelymetszettel rendelkező egyenest is egy harmadik színnel. Python bevezető 2017/18 ősz 30 / 31

A perceptron algoritmus 1 Vizsgáljuk meg, hogyan függ a szükséges korrekciós lépések száma a tanulási paramétertől! 2 Mi történik, ha közelebb hozzuk egymáshoz a két halmazt? Pl. legyen B = B + ε, ahol ε > 0. 3 Ellenőrizzük, hogy teljesül-e a perceptron konvergencia tétel! 4 Ábrázoljuk grafikonon, hogy hogyan alakul a hiba az epochok függvényében! Python bevezető 2017/18 ősz 31 / 31