基本上,我有一个子类ndarray和其他信息。当我对我的对象调用np.asarray()时,它只返回numpy数组并破坏我的附加信息。
那么,我的问题是: Python中是否有一种方法可以从子类中改变np.asarray()对ndarray子类的作用方式?当然,我不想改变numpy,我也不想遍历每个调用np.asarray()来处理这个问题的实例。
提前感谢!
克里斯
发布于 2015-09-17 23:04:27
简短回答:不。例如,Numpy的asarray()不检查其参数类上是否存在特殊方法,因此没有提供一种覆盖其行为的方法。
长答案:子类是不可能的,但是您可以在模块级代码中对numpy模块进行热补,用自己的包装器替换asarray函数。这是一个非常麻烦的解决方案,我不推荐它,但它可能对你有用。
_real_asarray = np.asarray
def _new_asarray(a, dtype=None, order=None):
if isinstance(a, MyClass):
# special handling here
else:
return _real_asarray(a, dtype, order)
np.asarray = _new_asarray发布于 2015-09-17 22:48:54
不是的。numpy的asarray()被编码为实例化一个常规的numpy数组,如果不编辑asarray()或更改调用者的代码来调用您的特殊方法而不是asarray(),您就不能更改它。
https://stackoverflow.com/questions/32640830
复制相似问题