Как Numpy / Scipy превращает функции C в векторизованные функции Python?

1

Насколько я понимаю, векторизованные функции numpy выполняются быстрее, чем циклы Python, потому что циклы выполняются в C или Fortran. Я хотел бы знать, где в исходном коде это происходит.

Например, биноминальная функция CDF scipy.special.bdtr принимает аргументы в виде массива k,n,p и будет возвращать символ ndarray при условии, что аргументы транслируемы. В документации сказано, что scipy.special.bdtr - это оболочка для подпрограммы в библиотеке математических функций Cephes. Копаясь в исходном коде на Github, я нашел scipy/special/cephes/bdtr.c содержащий код C для этой подпрограммы; вот что я считаю первыми тремя строками соответствующей функции C:

двойной бдтр (k, n, p)

int k, n;

двойной р;

Похоже, что основная функция C не работает с массивами, и я не могу найти исходный код, где эта функция преобразуется в функцию Python, которая работает с массивами.

  • 0
    «Обертка» не всегда означает «прямое функциональное отображение»; сам код-обертка может делать дополнительные вещи, такие как циклы, о bdtr вы упомянули (хотя scipy интерфейс scipy вряд ли будет векторизован, так как bdtr bdtr работает только с одним набором параметров).
Теги:
numpy
scipy
vectorization

1 ответ

0

В случае функций scipy.special код на C содержит только "ядра" функций, то есть, как применить функцию к скалярам. Каждый из них затем оборачивается в ufunc с автоматически сгенерированным кодом Cython. Для этого он использует заголовочные файлы C, такие как scipy/special/cephes.h, файлы объявлений Cython, такие как scipy/special/_cephes.pxd, файл scipy/special/functions.json, где все функции, которые будут сгенерированы для scipy.special перечислены и, наконец, scipy/special/_generate_pyx.py, где фактически создается код Cython.

  • 0
    Очень трудно читать scipy/special/_generate_pyx.py , поэтому я посмотрел, как писать пользовательские функции в документации Numpy. Все, что C греческий для меня.
  • 0
    @BatWannaBe Да, генерация кода трудна для чтения в большинстве случаев, и этот не является исключением ... Кажется, довольно сложно разобраться с человеком, незнакомым с этим.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню