Почему numpy.angle () не является ufunc? - PullRequest
0 голосов
/ 13 февраля 2019

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

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

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

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

1 Ответ

0 голосов
/ 13 февраля 2019

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

...