我试图了解Subclassing ndarray的细节,但它非常密集。(第二种可能:我很密集。)
下面是一个最小的例子:
import numpy as np
class MyArray(np.ndarray):
def __new__(cls, input_array, foo='foo'):
self = input_array.view(cls)
self.foo = foo
return self
def __array_finalize__(self, from_array):
if from_array is not None:
self.foo = getattr(from_array, 'foo', 'foo')
下面是一个不必要行为的演示:
^{pr2}$如何防止本应返回单个数字的函数或方法将结果包装成MyArray
?在
我不是类方面的专家,但是使用https://docs.scipy.org/doc/numpy/user/basics.subclassing.html中的代码:
编辑:在进一步查看上面提到的页面并播放更多内容之后,我想到了:
^{pr2}$编辑2:修正数组finalize的最后一行
这很难。我能想到的只有2个解决方案,而且我不喜欢其中任何一个——一个来自numpy文档中关于ndarray的子类化——使用array_wrap。其次是更多的保存->;覆盖np.总和以及你想要的其他功能。在
注意:
下面的代码需要抛光,主要是使用array_wrap的解决方案。不过,看起来array_wrap是正确的方向,因为它也适用于其他函数(*.mean()等),但正如您所说,文档非常密集,很难说黑客攻击这些神奇函数会产生什么后果。 重写在另一方面是简单明了的,但是谁想重写所有现有的函数呢?在
很好的问题,我会尽力回答,不过,我不能百分之百确定这个解决方案是否有副作用。在
必须指定
__array_ufunc__
方法。通过更改https://docs.scipy.org/doc/numpy/user/basics.subclassing.html#array-ufunc-for-ufuncs中的代码,我获得了预期的结果(我相信这些结果是:没有将标量结果包装为MyArray,对吗?)在导致:
^{pr2}$相关问题 更多 >
编程相关推荐