forked from Introtocs/Week10_Lec
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsample.py
82 lines (63 loc) · 2.08 KB
/
sample.py
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
# -*- coding: utf-8 -*-
"""
Created on Sat Mar 26 13:16:01 2016
@author: zhengzhang
"""
# -*- coding: utf-8 -*-
"""
Created on Thu Oct 29 16:36:11 2015
@author: zhengzhang
"""
class Sample(object):
def __init__(self, name, features, label=None):
#Assumes features is an array of numbers
self.name = name
self.features = features
self.label = label
def getDimensionality(self):
return len(self.features)
def getFeatures(self):
return self.features[:]
def getLabel(self):
return self.label
def setLabel(self, label):
self.label = label
def getName(self):
return self.name
def setName(self, name):
self.name = name
def distance(self, other):
def minkowskiDist(v1, v2, p=2):
"""Assumes v1 and v2 are equal-length arrays of numbers
Returns Minkowski distance of order p between v1 and v2"""
dist = 0.0
for i in range(len(v1)):
dist += abs(v1[i] - v2[i])**p
return dist**(1.0/p)
return minkowskiDist(self.features, other.getFeatures())
def __add__(self, other):
f = []
for i in range(self.getDimensionality()):
f.append(self.getFeatures()[i] + other.getFeatures()[i])
return Sample(self.name + '+' + other.name, f, self.label)
def __truediv__(self, n):
f = []
for e in self.getFeatures():
f.append(e/float(n))
return Sample(self.name + '/' + str(n), f)
def __sub__(self, other):
f = []
for i in range(self.getDimensionality()):
f.append(self.getFeatures()[i] - other.getFeatures()[i])
return Sample(self.name + '-' + other.name, f)
def __str__(self):
return self.name +': ' \
+ str(self.features) + ': ' \
+ str(self.label)
if __name__ == "__main__":
x = Sample('x', [1, 2])
y = Sample('y', [4, 5])
print(x + y)
print(x - y)
print(x / 4)
pass