#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
, так и от реализации Cephesexpi
. Спасибо!