Advertisement
Guest User

Untitled

a guest
Aug 1st, 2015
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. import numpy as np
  2.  
  3. class extensible_array (object):
  4. def __init__(self, ndims=0, dtype=int, init=None):
  5. if init is not None:
  6. self.arr = init
  7. else:
  8. self.arr = np.zeros ([0]*ndims, dtype=dtype)
  9.  
  10. def __getitem__ (self, indices):
  11. try:
  12. return self.arr.__getitem__ (indices)
  13. except IndexError:
  14. self.resize ([i+1 for i in indices])
  15. return self.arr.__getitem__ (indices)
  16.  
  17. def __setitem__ (self, indices, value):
  18. try:
  19. return self.arr.__setitem__ (indices, value)
  20. except IndexError:
  21. self.resize ([i+1 for i in indices])
  22. return self.arr.__setitem__ (indices, value)
  23.  
  24. def resize (self, indices):
  25. if any ([i > x for x,i in zip (self.arr.shape, indices)]):
  26. newarr = np.zeros ([max (i,x) for x,i in zip (self.arr.shape, indices)], dtype=self.arr.dtype)
  27. newarr[[slice(0,i) for i in self.arr.shape]] = self.arr
  28. self.arr = newarr
  29.  
  30. def __iadd__ (self, other):
  31. maxshape = [max (a,b) for a,b in zip (self.shape, other.shape)]
  32. self.resize (maxshape)
  33. self.arr[[slice(0,i) for i in other.shape]] += other
  34. return self
  35.  
  36. def __getattr__(self, name): # delegate all operations not specifically overridden to base array
  37. return getattr (self.arr, name)
  38.  
  39. def __repr__ (self):
  40. return self.arr.__repr__()
  41.  
  42. def test1():
  43. u = extensible_array (2)
  44. u[1,1] += 2
  45. u += u
  46. return u
  47.  
  48. if __name__ == '__main__':
  49. u = test1()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement