Advertisement
Guest User

Untitled

a guest
Jun 20th, 2019
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.24 KB | None | 0 0
  1. class IndexGenerator:
  2. ''' A lightweight Index Generator that support multi-dimensional shapes.
  3. Indices are genrated on-the-fly!
  4.  
  5. # Args:
  6. - shape : tuple or list.
  7.  
  8. # Usage
  9. import numpy as np
  10. array = np.ones((32,35,3,10))
  11. for index IndexGenerator(array.shape):
  12. print(array[index])
  13. '''
  14.  
  15. def __init__(self,shape):
  16. self.shape = shape
  17. self.ndim = len(shape)
  18. self.counters = [0] * self.ndim
  19. self.has_next = len(shape)>0 and not 0 in shape
  20.  
  21. def __iter__(self):
  22. return self
  23.  
  24. def __next__(self):
  25.  
  26. if not self.has_next:
  27. raise StopIteration
  28.  
  29. return self.get_next_index()
  30.  
  31. def increment_single_index(self,index):
  32. if self.counters[index] < self.shape[index] - 1:
  33. self.counters[index] += 1
  34. return False
  35. else:
  36. self.counters[index] = 0
  37. return True
  38.  
  39. def get_next_index(self):
  40. next_index = tuple(self.counters)
  41. dim = -1
  42. while dim >= -self.ndim and self.increment_single_index(dim):
  43. dim -= 1
  44. if dim < -self.ndim:
  45. self.has_next = False
  46. return next_index
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement