为什么 numpy.angle() 不是 ufunc?

Tho*_*las 2 python numpy python-xarray

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

它似乎符合numpy 文档中ufunc 的标准,但未列为其中之一。

我认为它可能不符合定义,因为它转换了数字的类型(从复数到实数),但是已经有其他 ufunc 可以做到这一点(例如np.absolute)。

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

hpa*_*ulj 5

完整代码np.angle(来自numpy GitHub repo

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
Run Code Online (Sandbox Code Playgroud)

所以它是一个薄的 python 包装器np.arctan2,它是一个ufunc.

一种猜测是,没有人认为它需要成为 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 数组的薄包装器。