为什么numpy.angle()不是numpy通用函数(ufunc)?

它似乎符合numpy documentation中ufunc的标准,但未作为一个列出。

我认为这可能不符合定义,因为它会将数字的类型(从复数转换为实数),但是已经有其他ufunc可以执行此操作(例如np.absolute)。

我遇到了这个问题,因为我试图将np.angle直接应用于包含复数的xarray DataArray,并且它返回一个numpy数组而不是xarray DataArray。我认为是这样做的,因为它不是numpy的ufunc,而xarray会对此进行检查。

最佳答案

np.angle的完整代码

def angle(z, deg=0):
    if deg:
        fact = 180/pi
    else:
        fact = 1.0
    z = asarray(z)
    if (issubclass(z.dtype.type, _nx.complexfloating)):
        zimag = z.imag
        zreal = z.real
    else:
        zimag = 0
        zreal = z
    return arctan2(zimag, zreal) * fact
File:      /usr/local/lib/python3.6/dist-packages/numpy/lib/function_base.py


因此,它是np.arctan2的瘦python包装器,它是ufunc

一种猜测是,没有人认为它需要成为一个ufunc,或者对将其照搬这样的工作感兴趣。

https://docs.scipy.org/doc/numpy-1.15.1/reference/c-api.ufunc.html

https://docs.scipy.org/doc/numpy-1.15.1/reference/c-api.generalized-ufuncs.html

https://docs.scipy.org/doc/numpy-1.15.0/user/c-info.ufunc-tutorial.html

在我看来,直接使用np.arctan2并使用您自己的用于复杂dtype数组的薄包装器要简单得多。

关于python - 为什么numpy.angle()不是ufunc?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54674233/

10-12 20:15