Числа со Scipy: вызов функций и компиляция - PullRequest
0 голосов
/ 31 октября 2019

Я новичок в цифрах со Сципи. В частности, я хотел бы интегрировать систему (сложных) дифференциальных уравнений. Я заметил, что scipy.integrate.solve_ivp может сделать эту работу. Поскольку мои уравнения зависят от некоторого числового параметра, я написал класс строителя, чтобы построить уравнения, а также начальные условия

from scipy.integrate import solve_ivp

class eq_builder:
    def __init__(self, parameters):
        self._parameters = parameters

    def build_eqs():
        def numerical_function(t, y):
            #here y is a list. This numerical function uses parameters and return a list
        return numerical_function

    def build_ics():
        #generate and returns initial conditions (as a list)

, тогда я использую

a = eq_builder(my_parameter)
solve_ivp(a.build_eqs(), [0, 10000], a.build_ics())

ВОПРОСЫ

  1. Поскольку numerical_function будет вызываться несколько раз solve_ivp, есть ли способ компилировать , чтобы ускорить процесс вычисления?
  2. Вопределение numerical_function следует ли мне ограничить, как я могу, более абстрактные (но неотразимые) вещи, такие как map, над списком или пониманием списка?
  3. У вас есть какой-нибудь другой совет, чтобы дать мне? Считайте, что число уравнений в вышеупомянутой системе имеет порядок нескольких сотен.

1 Ответ

1 голос
/ 31 октября 2019

Поскольку числовая_функция будет вызываться несколько раз с помощью solve_ivp, есть ли способ скомпилировать ее, чтобы ускорить процесс вычислений?

Вам придется выйти изспособ сделать это. Делая шаг назад, вы предполагаете, что «скомпилированный» код всегда быстрее интерпретируемого Python. Это не относится к делу. Это правда, что простые вещи, такие как циклы и т. Д. В Python медленнее, чем, например, в C, но по этой причине вы просто не пишете большие циклы в Python. Вы предпочитаете использовать массивы с их внутренними функциями. Например, numpy.dot(a, b) на намного быстрее, чем что-либо, что вы пишете сами на C, потому что numpy.dot использует некоторые модные библиотеки (в нашем случае BLAS), которые выполняют работу лучше, чем когда-либо.

В определении числовой функции я должен ограничивать, как могу, некоторые более абстрактные (но выразительные) вещи, такие как отображение списка или его понимание?

Это вопрос вкуса.

У вас есть другой совет, чтобы дать мне? Учтите, что число уравнений в вышеупомянутой системе имеет порядок нескольких сотен.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...