| # A simple vector class |
| |
| import operator |
| |
| |
| class Vec: |
| |
| def __init__(self, *v): |
| self.v = list(v) |
| |
| @classmethod |
| def fromlist(cls, v): |
| if not isinstance(v, list): |
| raise TypeError |
| inst = cls() |
| inst.v = v |
| return inst |
| |
| def __repr__(self): |
| return 'Vec(' + repr(self.v)[1:-1] + ')' |
| |
| def __len__(self): |
| return len(self.v) |
| |
| def __getitem__(self, i): |
| return self.v[i] |
| |
| def __add__(self, other): |
| # Element-wise addition |
| v = list(map(operator.add, self, other)) |
| return Vec.fromlist(v) |
| |
| def __sub__(self, other): |
| # Element-wise subtraction |
| v = list(map(operator.sub, self, other)) |
| return Vec.fromlist(v) |
| |
| def __mul__(self, scalar): |
| # Multiply by scalar |
| v = [x*scalar for x in self.v] |
| 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-b) |
| print(a*3.0) |
| |
| test() |