diff options
Diffstat (limited to 'Demo/classes/Vec.py')
-rwxr-xr-x | Demo/classes/Vec.py | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/Demo/classes/Vec.py b/Demo/classes/Vec.py new file mode 100755 index 0000000..6e2bc47 --- /dev/null +++ b/Demo/classes/Vec.py @@ -0,0 +1,65 @@ +# A simple vector class + + +def vec(*v): + return apply(Vec().init, v) + + +class Vec: + + def init(self, *v): + self.v = [] + for x in v: + self.v.append(x) + return self + + + def fromlist(self, v): + self.v = [] + if type(v) <> type([]): + raise TypeError + self.v = v[:] + return self + + + def __repr__(self): + return 'vec(' + `self.v`[1:-1] + ')' + + def __len__(self): + return len(self.v) + + def __getitem__(self, i): + return self.v[i] + + def __add__(a, b): + # Element-wise addition + v = [] + for i in range(len(a)): + v.append(a[i] + b[i]) + return Vec().fromlist(v) + + def __sub__(a, b): + # Element-wise subtraction + v = [] + for i in range(len(a)): + v.append(a[i] - b[i]) + return Vec().fromlist(v) + + def __mul__(self, scalar): + # Multiply by scalar + v = [] + for i in range(len(self.v)): + v.append(self.v[i]*scalar) + return Vec().fromlist(v) + + + +def test(): + a = vec(1, 2, 3) + b = vec(3, 2, 1) + print a + print b + print a+b + print a*3.0 + +test() |