I\'m looking to get an array (or matrix) that is circular, such that
Let:
a = [1,2,3]
Then I would like
a[0] = 1
a
You can use modulo operator, like this
print a[3 % len(a)]
If you don't want to use modulo operator like this, you need to subclass list
and implement __getitem__, yourself.
class CustomList(list):
def __getitem__(self, index):
return super(CustomList, self).__getitem__(index % len(self))
a = CustomList([1, 2, 3])
for index in xrange(5):
print index, a[index]
Output
0 1
1 2
2 3
3 1
4 2
If you want to do the same with Numpy Arrays, you can do like this
import numpy as np
class CustomArray(np.ndarray):
def __new__(cls, *args, **kwargs):
return np.asarray(args[0]).view(cls)
def __getitem__(self, index):
return np.ndarray.__getitem__(self, index % len(self))
a = CustomArray([1, 2, 3])
for index in xrange(5):
print a[index]
More information about Subclassing Numpy Arrays can be found here (Thanks to JonClements)