В общем, когда Cython видит вызов функции python, он обрабатывается как непрозрачная операция. Cython может исключить некоторые накладные расходы на вызовы, но в противном случае он будет генерировать точно такую же семантику, как если бы эта функция была вызвана из python.
Некоторые numpy-конструкции, такие как тип ndarray[dtype]
, специально компилируются компилятором Cython для генерации более эффективного кода. numpy ufuncs - нет, поэтому для cython np.sqrt
это просто еще одна функция python, поэтому она не может сделать ничего лучше, чем вызвать обратно Python для ее запуска.
Другие ускорители Python, такие как numba
, будут перехватывать вызов np.sqrt
и переписывать его в эквивалентный код низкого уровня.