Уфун против основных арифметических операторов в Numpy - PullRequest
0 голосов
/ 04 декабря 2018

Я вижу, что универсальная функция (ufunc) используется для выполнения поэлементных операций с массивами.

 arr = np.arange(5)
 arr2 = np.arange(5,10)
 np.add(arr,arr2)

Этот фрагмент кода похож на arr + arr2.В таком случае, почему мы должны использовать ufunc?

1 Ответ

0 голосов
/ 04 декабря 2018

Потому что это функция, которая поставляется с множеством функций, которые простое выражение add не предоставит вам.Вы можете переопределить объекты ufunc, основываясь на вашем ожидаемом поведении в определенных ситуациях, и при этом воспользоваться всеми его функциональными возможностями.

Это можно увидеть, просто взглянув на заголовок функции:

numpy.add (x1, x2, /, out = None, *, где = True, casting = 'same_kind ', order =' K ', dtype = None, subok = True [, signature, extobj])

Подробнее в документе:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.add.html

И:

https://docs.scipy.org/doc/numpy/reference/ufuncs.html#ufuncs-kwargs\

Также обратите внимание, что всякий раз, когда вы делаете a + b, если a или b - ndarray, add(a, b) вызывается внутренне numpy.Таким образом, нет разницы, когда оба аргумента являются ndarray.

Еще одна хорошая функциональность, которую предоставляют ufunc, заключается в том, что вы можете выполнять множественные функции непосредственно над объектами python.

In [20]: np.add([2, 3, 4], 4)
Out[20]: array([6, 7, 8])

Это еслисделав сумму в Python, вы получите ошибку TypeError:

In [21]: [2, 3, 4] + 4
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-21-0a8f512c0d3a> in <module>()
----> 1 [2, 3, 4] + 4

TypeError: can only concatenate list (not "int") to list
...