У меня проблемы с пониманием использования векторизованного декоратора Numbas в Python - PullRequest
0 голосов
/ 12 сентября 2018

В настоящее время я изучаю использование Numba для ускорения работы моего программного обеспечения на python. Я совершенно новичок в этой концепции и в настоящее время пытаюсь изучить абсолютные основы. То, на чем я застрял сейчас:

Я не понимаю, в чем большая польза от векторизованного декоратора .

Документация объясняет, что декоратор используется для превращения обычной функции python в Numpy ufunc. Из того, что я понимаю, преимущество ufunc заключается в том, что он может принимать массивы (вместо скаляров) и предоставлять такие функции, как широковещание.

Но все примеры, которые я могу найти в Интернете, могут быть так же легко решены без этого декоратора.

Взять, к примеру, этот пример из документации по numba.

@vectorize([float64(float64, float64)])
def f(x, y):
    return x + y

Они утверждают, что теперь функция работает как numpy ufunc. Но разве это не так, даже без декоратора? Если бы я просто запустил следующий код:

def f(x,y):
    return x+y

x = np.arange(10)
y = np.arange(10)

print(f(x,y))

Это работает так же хорошо. Функция уже принимает аргументы типа, отличного от скаляров.

Что я тут недопонимаю?

1 Ответ

0 голосов
/ 12 сентября 2018

Просто прочитайте несколько строк документации ниже:

Вы можете спросить себя: «Зачем мне это делать вместо того, чтобы компилировать простой цикл итерации с использованием декоратора @jit?».Ответ заключается в том, что уфунки NumPy автоматически получают другие функции, такие как сокращение, накопление или широковещание.

Например, f.reduce(arr) суммирует все элементы с arr на скорости C, чего не может f.

...