-
Notifications
You must be signed in to change notification settings - Fork 0
/
Vector.py
118 lines (74 loc) · 2.93 KB
/
Vector.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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import Matrix as mat
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
class Vector:
#Representation of a n-dimensional vector
def __init__(self, dimensions, elements):
self.dimensions = dimensions
self.elements = elements
def equals(self, other):
if not isinstance(other, Vector) or self.dimensions != other.dimensions:
return False
else:
for i in range(self.dimensions):
if(self.get_element(i) != other.get_element(i)):
return False
return True
def get_element(self, p):
return self.elements[p]
def change_value(self, element, val):
self.elements[element] = val
return
def __str__(self):
st = ""
for i in range(self.dimensions):
st += "{} ".format(self.get_element(i))
return st
def __add__(self, other):
assert isinstance(other, Vector)
s = Vector(self.dimensions,[])
for i in range(self.dimensions):
s.elements[i] = self.elements[i] + other.elements[i]
return s
def __sub__(self,other):
assert isinstance(other, Vector)
s = Vector(self.dimensions, [])
for i in range(self.dimensions):
s.elements[i] = self.elements[i] - other.elements[i]
return s
def __mul__(self, other):
if(isinstance(other,Vector)):
return self.dotProduct(other)
else:
s = Vector(self.dimensions,np.zeros(self.dimensions))
for i in range(self.dimensions):
s.elements[i] = self.elements[i] * other
return s
def dotProduct(self, other):
assert isinstance(other, Vector)
sum = 0.0
for i in range(self.dimensions):
sum += self.elements[i] + other.elements[i]
return sum
def transform(self, other):
assert isinstance(other, mat.Matrix)
t = Vector(self.dimensions, np.zeros(self.dimensions))
if self.dimensions != other.dimensions:
print("Can't be multiplied with each other you dolt")
else:
value = 0.0
for i in range(self.dimensions):
value = 0.0
for j in range(self.dimensions):
value += other.get_element(i,j) * self.get_element(j)
t.change_value(i,value)
return t
def plot(self):
print(self.elements.shape)
pca = PCA(n_components=2)
reduced = pca.fit_transform(M)
# We need a 2 x 944 array, not 944 by 2 (all X coordinates in one list)
t = reduced.transpose()
plt.scatter(t[0], t[1])
plt.show()