Почему numpy.angle() не является ufunc?

Почему numpy.angle() не универсальная функция numpy (ufunc)?

Кажется, что он соответствует критериям для ufunc в документации numpy, но он не указан как единое целое.

Я думал, что это может не соответствовать определению, потому что оно преобразует тип числа (из сложного в реальное), но уже есть другие уфунки, которые делают это (например, np.absolute).

Я сталкивался с этим, потому что я пытался применить np.angle непосредственно в массив данных xarray DataArray, содержащий комплексные числа, и вместо массива данных DataArray он возвращает пустой массив. Я думаю, что это так, потому что это не тупой ufunc, и xarray проверяет это.

1 ответ

Решение

Полный код для 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

Так что это тонкая оболочка Python для np.arctan2, который является 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.

Другие вопросы по тегам