get-item-by-index 動作を変更する numpy.ndarray のサブクラスがあります。ただし、誰かが私のサブクラスで印刷するときに、元の ndarray 出力形式を保持したいと考えています。__iter__ 関数をオーバーライドしようとしましたが、うまくいかないようです。__getitem__ がオーバーロードされている場合、基になる配列の順序で数値を出力することは可能ですか?
import numpy as np
class imarray(np.ndarray):
def __new__(cls, d, f):
nd = np.asarray(d)
return super(imarray, cls).__new__(cls,(nd.size,), dtype=nd.dtype, buffer=nd).view(imarray)
def __init__(self, d, f):
self.f = f
def __array_finalize__(self, o):
pass
def __getitem__(self, i):
return super(imarray, self).__getitem__(self.f(i))
def __setitem__(self, i, y):
return super(imarray, self).__setitem__(self.f(i), y)
def __iter__(self):
return super(imarray, self).__iter__
if __name__ == "__main__":
a = imarray([1., 2., 3.1415], lambda i:i+1)
print a[0] # print .2
a[-1] =.4
print a[-1] # print .4
print a # print [ 2. 3.1415 0.4 ] but want [ 0.4 2. 3.1415 ]