Numpy 使用自定义ndarray子类截取数组创建例程
我有一个自定义的numpy ndarray子类,我希望所有的数组创建函数,如Numpy 使用自定义ndarray子类截取数组创建例程,numpy,numpy-ndarray,Numpy,Numpy Ndarray,我有一个自定义的numpy ndarray子类,我希望所有的数组创建函数,如np.arange,np.zeros等,都被我的自定义子类截取,以便向其中添加属性 我在fornp.arange中看到了like关键字: 引用对象以允许创建非NumPy数组的数组。如果作为like传入的数组like支持array\u函数协议,则结果将由它定义。在这种情况下,它确保创建与通过此参数传入的对象兼容的数组对象 问题是我没有引用对象(只有类),因为在调用np.arange函数时数组还没有创建。一开始我觉得这样可能
np.arange
,np.zeros
等,都被我的自定义子类截取,以便向其中添加属性
我在fornp.arange
中看到了like
关键字:
引用对象以允许创建非NumPy数组的数组。如果作为like传入的数组like支持array\u函数协议,则结果将由它定义。在这种情况下,它确保创建与通过此参数传入的对象兼容的数组对象
问题是我没有引用对象(只有类),因为在调用np.arange
函数时数组还没有创建。一开始我觉得这样可能行得通:
class Subclass(np.ndarray):
def __array_function__(self, func, *args):
... intercept func (np.arange) ...
np.arange(10, like=Subclass)
但这是行不通的。如何使用自定义类截取数组创建例程?作为术语,
np.arange
和np.zero
是函数,而不是方法。此like
参数可能会根据您的需要添加一些自定义选项,但它是一个新功能,并且没有广泛应用。是的,读取该参数看起来像np.arange(10,like=np.ndarray)
应该可以工作。但是它没有。np.arange(3,like=np.ndarray([]))
runsYes,执行np.arange(10,like=Subclass(0))
将拦截函数。但是我需要实例化这个类吗?如果我尝试ndarray
is,它会给出一个错误,而如果我给出一个实际的数组,它会运行。我没有备用的类来测试这个。