Informatika2-2014/Gyakorlat05
A MathWikiből
(Változatok közti eltérés)
(egy szerkesztő 3 közbeeső változata nincs mutatva) | |||
1. sor: | 1. sor: | ||
− | == | + | == Az előző gyakorlat példájának megoldása == |
+ | <python> | ||
+ | import sys | ||
+ | import math | ||
+ | def reader(fileName): | ||
+ | dataSet = [] | ||
+ | f = open(fileName,'r') | ||
+ | for line in f: | ||
+ | line = line.rstrip("\n") | ||
+ | L = line.split(" ") | ||
+ | data = [] | ||
+ | for l in L: | ||
+ | data.append(float(l)) | ||
+ | dataSet.append(data) | ||
+ | return dataSet | ||
+ | |||
+ | def learn(trainingData): | ||
+ | averages = [] | ||
+ | for i in range(0,10): | ||
+ | averages.append(0) | ||
+ | for user in trainingData: | ||
+ | for i in range(0,10): | ||
+ | averages[i]+=user[i+1] | ||
+ | for i in range(10): | ||
+ | averages[i] = averages[i] / float(len(trainingData)) | ||
+ | return averages | ||
+ | |||
+ | def predict(averages,testingData): | ||
+ | predictions = [] | ||
+ | for test in testingData: | ||
+ | aboveAverage = 0 | ||
+ | for i in range(0,10): | ||
+ | if(test[i+1]>averages[i]): | ||
+ | aboveAverage+=1 | ||
+ | id = test[0] | ||
+ | truth = int(test[-1]) | ||
+ | if aboveAverage > len(averages)*0.5: | ||
+ | predictions.append([id,truth,1]) | ||
+ | else: | ||
+ | predictions.append([id,truth,0]) | ||
+ | return predictions | ||
+ | |||
+ | def accuracy(predictions): | ||
+ | acc = 0 | ||
+ | for prediction in predictions: | ||
+ | if prediction[1] == prediction[2]: | ||
+ | acc += 1 | ||
+ | return acc/float(len(predictions)) | ||
+ | |||
+ | def learnAndPredict(): | ||
+ | trainingData = reader(sys.argv[1]) | ||
+ | testingData = reader(sys.argv[2]) | ||
+ | averages = learn(trainingData) | ||
+ | predictions = predict(averages,testingData) | ||
+ | print "Accuracy: ", accuracy(predictions) | ||
+ | |||
+ | learnAndPredict() | ||
+ | </python> | ||
+ | == Osztályok == | ||
*Az osztályok egységbe zárnak és a felesleges információt elrejtik. | *Az osztályok egységbe zárnak és a felesleges információt elrejtik. | ||
*Az osztályok metódusokat és változókat tartalmaznak. Metódusokat tekintsük osztályokon belüli függvényeknek. | *Az osztályok metódusokat és változókat tartalmaznak. Metódusokat tekintsük osztályokon belüli függvényeknek. | ||
8. sor: | 66. sor: | ||
Egy metódust az alábbi módon definiálunk pythonban: | Egy metódust az alábbi módon definiálunk pythonban: | ||
<python> | <python> | ||
− | class | + | class Brick: |
def setx(self, x): | def setx(self, x): | ||
self.x = x | self.x = x | ||
17. sor: | 75. sor: | ||
* Az alábbi módon hozhatunk létre objektumokat és hívhatjuk meg azok metódusait: | * Az alábbi módon hozhatunk létre objektumokat és hívhatjuk meg azok metódusait: | ||
<Python> | <Python> | ||
− | f = | + | f = Brick() |
f.setx(5) | f.setx(5) | ||
f.bar() | f.bar() | ||
− | + | Brick.setx(f,5) | |
− | + | Brick.bar(f) | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
</Python> | </Python> | ||
− | |||
<python> | <python> | ||
>>> class A: | >>> class A: | ||
69. sor: | 107. sor: | ||
== Feladatok == | == Feladatok == | ||
=== 1. feladat === | === 1. feladat === | ||
− | * Írj mátrix osztályt az alábbi | + | Ismételd meg a fenti kódrészleteket. |
+ | === 2. feladat === | ||
+ | * Írj mátrix osztályt az alábbi metódusokkal: | ||
<python> | <python> | ||
class Matrix: | class Matrix: |
A lap jelenlegi, 2014. március 11., 13:48-kori változata
Tartalomjegyzék |
Az előző gyakorlat példájának megoldása
import sys import math def reader(fileName): dataSet = [] f = open(fileName,'r') for line in f: line = line.rstrip("\n") L = line.split(" ") data = [] for l in L: data.append(float(l)) dataSet.append(data) return dataSet def learn(trainingData): averages = [] for i in range(0,10): averages.append(0) for user in trainingData: for i in range(0,10): averages[i]+=user[i+1] for i in range(10): averages[i] = averages[i] / float(len(trainingData)) return averages def predict(averages,testingData): predictions = [] for test in testingData: aboveAverage = 0 for i in range(0,10): if(test[i+1]>averages[i]): aboveAverage+=1 id = test[0] truth = int(test[-1]) if aboveAverage > len(averages)*0.5: predictions.append([id,truth,1]) else: predictions.append([id,truth,0]) return predictions def accuracy(predictions): acc = 0 for prediction in predictions: if prediction[1] == prediction[2]: acc += 1 return acc/float(len(predictions)) def learnAndPredict(): trainingData = reader(sys.argv[1]) testingData = reader(sys.argv[2]) averages = learn(trainingData) predictions = predict(averages,testingData) print "Accuracy: ", accuracy(predictions) learnAndPredict()
Osztályok
- Az osztályok egységbe zárnak és a felesleges információt elrejtik.
- Az osztályok metódusokat és változókat tartalmaznak. Metódusokat tekintsük osztályokon belüli függvényeknek.
- Tekintsünk erre úgy, hogy a kód egy részét (mind tárolókat, mind a függvényeket nézve) összefogjuk.
- Egy objektum egy osztály konkrét megvalósítása.
Egy metódust az alábbi módon definiálunk pythonban:
class Brick: def setx(self, x): self.x = x def bar(self): print self.x
- Itt a lényeges dolog a self változó, ami mindig az első argumentuma a metódusnak. Ez mindig a konkrét megvalósított objektumot jelöli. Tehát külön értékadás nélkül self.x az osztályon (objektumon) belüli x változó, aminek az értékét állítjuk be a setx függvénnyel.
- Az alábbi módon hozhatunk létre objektumokat és hívhatjuk meg azok metódusait:
f = Brick() f.setx(5) f.bar() Brick.setx(f,5) Brick.bar(f)
>>> class A: ... pass ... >>> A.v1 = 10 >>> x=A() # létrehozok két példányt >>> y=A() >>> x.v1 # példányon belül is elérem az osztály szintű változót 10 >>> x.v1 = 34 # itt viszont létrehozok egy példány szintűt aminek a neve felülírja az osztály szintűt >>> y.v1 10 >>> x.v1 34 >>> A.v1 10 >>> A.v1 = 12 # itt az osztályszintű változót változtatjuk >>> x.v1 # mivel felülírtuk a v1-t az x példányban így ezen már nincs hatása 34 >>> y.v1 12 >>> A.v1 12
Feladatok
1. feladat
Ismételd meg a fenti kódrészleteket.
2. feladat
- Írj mátrix osztályt az alábbi metódusokkal:
class Matrix: def const(self,n,x): ... def zeros(self,n): ... def printer(self): ... def set(self,i,j,x): ... def get(self,i,j): ... def hasValue(self,i,j): ... def getLine(self,i): ... def pow(self): ... def product(self,v)
- próbálj meg hibakezelést beépíteni a függvényekbe (try --- except)