Как реализован scipy.special.expi?

#python #numpy #scipy

#python #numpy #scipy

Вопрос:

Я использовал scipy.special.expn , когда понял, что могу использовать expi вместо этого, и это должно быть намного быстрее, судя по коду Cephes, на котором я ожидал, что он будет основан. Но переключение с expn на expi практически не повлияло на время выполнения.

Это заставило меня заподозрить, что expi это реализуется эквивалентным вызовом, для expn которого не используются более простые условия, действующие для expi . Но, просматривая исходный код для scipy, я озадачен тем, как expi это реализовано. Я могу найти источник C для expn , но нет expi .

Может кто-нибудь уточнить, как expi это реализовано и / или где я могу найти для этого источник?

Комментарии:

1. Вы профилировали свой код, чтобы убедиться, что стоимость этой функции достаточно высока (по сравнению с остальными)? expi кажется, это реализовано путем вызова ссылки Fortran-library-code.

2. Согласно line_profiler, примерно 50% времени тратится на одну строку, в которой expi вызывается. Спасибо за ссылку. У меня все еще возникают проблемы с соединением точек между объявлениями функций заголовка и фактическим кодом.

3. Приведенная выше ссылка ссылается на имя expi_wrap , которое приведено здесь . Видите ли, вызывается та функция EIX , которая определена в этом огромном файле fortran-кода здесь . Но это также новая территория для меня, и я не могу объяснить вам, почему вы не наблюдаете ускорения. Возможно, также следуйте expn и сравните функции. Конечно, вы всегда можете попытать счастья в списке рассылки scipy.

4. Отлично, это было именно то, что я искал. Реализация сильно отличается как от expn , так и от реализации Cephes expi . Спасибо!