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

标签 python numpy python-xarray

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

它似乎符合 numpy documentation 中 ufunc 的标准但它没有被列为其中之一。

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

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

最佳答案

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,或者有兴趣将其转换为这样的工作。

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/

相关文章:

python - Django:如何检查用户是否在过去 7 天内注册?

algorithm - 为有向图中的所有顶点查找两步邻居的高效算法

python - 如何访问通过 Cython 传递的 numpy 数组

python - 遍历 xarray 数据集中的 dataArray 属性

python - 尺寸坐标具有填充值,因此值是重复的

python - 根据索引从矩阵中删除一些元素

python - Redisearch 不能在集群中工作?

python - 带有 web2py 的 SQLFORM.grid 的多行标题

.net - IronPython 无法运行导入 numpy 的脚本

python - 来自 netcdf 的 Xarray 数据数组返回大于输入的 numpy 网格数组