子类化的ndarray相对简单,但是与其它Python对象相比,它却更复杂一点。
ndarrays和对象创建
ndarray的子类化很复杂,因为ndarray类的新实例可以通过三种不同的方式产生。
1.显示的构造函数调用在MySubClass(params),这是创建Pythton实例的常用方法。
2.视图转换,将现有的ndarray转换为给定的子类
3.模板新功能,从模板实例创建新实例,包括从子类化的数组返回切片,从ufunc创建返回类型以及复制数组。
最后两个是ndarray的特性-为了支持数组切片之类的功能。子类化ndarray的复杂性是由于NumPy必须支持后两种实例创建路径的机制。
视图转换
视图强制转换是标准的ndarray机制,通过这种机制,我们可以获取任何子类的ndarray,并返回数组的视图作为另一个(指定的)子类。
从模板创建新的
当NumPy发现它需要从模板实例创建一个新实例时,ndarray子类的新实例也可以通过与查看类型转换非常相似的机制来实现,这种情况最明显的地方是在获取子类数组的切片时。
切片是原始c_arr数据的视图,因此,当我们从ndarray中获取一个视图时,我们返回一个新的ndarray,它属于同一个类,指向原始