有关numpy认可的特殊方法的文档的位置

时间:2018-07-20 17:13:11

标签: python numpy

math.expnumpy.exp之间的区别之一是,如果您有一个具有C方法的自定义类C.exp,则numpy.exp会注意到并委托给此方法,而math.exp不会:

class C:
    def exp(self):
        return 'hey!'

import math
math.exp(C())  # raises TypeError
import numpy
numpy.exp(C())  # evaluates to 'hey!'

但是,如果您转到web documentation of numpy.exp,这似乎是理所当然的。没有在任何地方明确说明。有记录此功能的地方吗?

更一般地说,是否有一个列表列出了numpy可以识别的 all 所有此类方法?

1 个答案:

答案 0 :(得分:3)

这不是func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {} 函数的特殊行为;这只是评估对象dtype数组的结果。

np.exp就像许多numpy函数一样,会在执行操作之前尝试将非数组输入转换为数组。

np.exp

因此In [227]: class C: ...: def exp(self): ...: return 'hey!' ...: In [228]: np.exp(C()) Out[228]: 'hey!' In [229]: np.array(C()) Out[229]: array(<__main__.C object at 0x7feb7154fa58>, dtype=object) In [230]: np.exp(np.array(C())) Out[230]: 'hey!' 被转换为一个数组,这是一个对象dtype *({C()不是像C()那样的可迭代对象)。通常,如果给定对象dtype数组,则numpy函数将在元素上进行迭代,要求每个元素执行相应的方法。这就解释了[228]如何最终评估[1,2,3]

C().exp()

In [231]: np.exp([C(),C()]) Out[231]: array(['hey!', 'hey!'], dtype=object) In [232]: np.exp([C(),C(),2]) --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-232-5010b59d525d> in <module>() ----> 1 np.exp([C(),C(),2]) AttributeError: 'int' object has no attribute 'exp' 可以在数组对象dtype上工作,前提是所有元素都具有np.exp方法。整数不。 exp也不是。

ndarray

In [233]: np.exp([C(),C(),np.array(2)]) AttributeError: 'numpy.ndarray' object has no attribute 'exp' 需要一个数字,一个Python标量(或可以转换为标量的东西,例如math.exp

我希望这种行为对所有人np.array(3)都是普遍的。我不知道其他不遵循该协议的numpy函数。

在某些情况下,ufunc委托给ufunc方法:

__