为什么numpy.angle()不是一个numpy通用函数(ufunc)?
它似乎符合numpy documentation中ufunc的标准,但它并没有被列为其中之一。
我认为它可能不符合定义,因为它将数字的类型转换(从复数到实数),但已经有其他ufuncs可以做到这一点(例如np.absolute)。
我之所以遇到这个问题,是因为我试图将np.angle直接应用于包含复数的xarray,它返回的是一个DataArray数组,而不是xarray DataArray。我认为它之所以这样做,是因为它不是一个numpy ufunc,xarray会对此进行检查。
发布于 2019-02-14 00:56:48
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因此,它是一个用于np.arctan2的瘦python包装器,它是一个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数组。
https://stackoverflow.com/questions/54674233
复制相似问题