Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- class extensible_array (object):
- def __init__(self, ndims=0, dtype=int, init=None):
- if init is not None:
- self.arr = init
- else:
- self.arr = np.zeros ([0]*ndims, dtype=dtype)
- def __getitem__ (self, indices):
- try:
- return self.arr.__getitem__ (indices)
- except IndexError:
- self.resize ([i+1 for i in indices])
- return self.arr.__getitem__ (indices)
- def __setitem__ (self, indices, value):
- try:
- return self.arr.__setitem__ (indices, value)
- except IndexError:
- self.resize ([i+1 for i in indices])
- return self.arr.__setitem__ (indices, value)
- def resize (self, indices):
- if any ([i > x for x,i in zip (self.arr.shape, indices)]):
- newarr = np.zeros ([max (i,x) for x,i in zip (self.arr.shape, indices)], dtype=self.arr.dtype)
- newarr[[slice(0,i) for i in self.arr.shape]] = self.arr
- self.arr = newarr
- def __iadd__ (self, other):
- maxshape = [max (a,b) for a,b in zip (self.shape, other.shape)]
- self.resize (maxshape)
- self.arr[[slice(0,i) for i in other.shape]] += other
- return self
- def __getattr__(self, name): # delegate all operations not specifically overridden to base array
- return getattr (self.arr, name)
- def __repr__ (self):
- return self.arr.__repr__()
- def test1():
- u = extensible_array (2)
- u[1,1] += 2
- u += u
- return u
- if __name__ == '__main__':
- u = test1()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement