Myclass
是一个numpy.ndarray
子类,旨在表示一组随时间变化的图像。每个图像都有一组元数据,例如时间、环境温度和相机温度。我已经将这些元数据存储在一个字典列表中,以便每个字典对应于数组中的一个层(myclass.metadata[0]
是对应于图像的字典myclass[0]
)。
我还重载getattr()
以使字典中的项目可以通过它们的键访问,从而myclass.etemp
产生例如[24.9, 25.0, 25.1]
.
当我切片 Myclass 对象时,如何实现我的属性数组以相同的方式切片?
现在,如果我这样做myobject[1].etemp
,我会得到 [24.9, 25.0, 25.1]
,但我想要[25.0]
。
这是我的课:
class Stack(numpy.ndarray):
props= [
'version',
'width',
'height',
'shotrange',
'calibrange',
'unit',
'irb_fname',
'fidx',
'distance',
'etemp',
'zoom',
'ctemp',
'date',
'recdate',
'rectime',
]
def __new__(cls, input_array, mdata=None):
obj = numpy.asarray(input_array).view(cls)
if isinstance(mdata, collections.Iterable): # when reading from text file
obj.mdata = mdata
else:
obj.mdata = [arr.mdata[0] for arr in input_array] # when combining Stack-type objects
return obj
def __array_finalize__(self, obj):
if obj is None: return
self.mdata = getattr(obj, 'mdata', None)
def __getattr__(self, name):
print(numpy.shape(self))
if numpy.rank(self) < 3: # we're looking at a single slice
pass
if name == 'starttime':
return self.mdata[0]['date']
elif name == 'time':
return [(item['date'] - self.mdata[0]['date']).total_seconds() for item in self.mdata]
elif name in Stack.props:
return [item[name] for item in self.mdata]
else:
raise AttributeError
我需要做什么来实现这种行为?还是有其他更好的方法来存储元数据?