Эффективные стратегии для численного моделирования в python - реальная векторизация? - PullRequest
0 голосов
/ 06 апреля 2020

Я моделирую нейроны / небольшие группы нейронов в python, использую систему связанных ODE для каждого нейрона и решаю по методу Эйлера. Код работает, но не очень быстро, особенно время, затрачиваемое на сохранение результатов каждые 100 или 1000 шагов в массив результатов.

Для меня это не проблема, так как масштаб симуляции, которые мне нужно выполнить, управляются на моей локальной машине или выполняются удаленно на кластере факультетов. Но вполне возможно, что в будущем я захочу проводить более крупные симуляции (10 с, может быть, даже 100 с юнитов), и поэтому мне любопытно узнать о возможных путях ускорения. Встроенные в ODE решатели SciPys (семейство ODE45 * et al. 1009 *) быстры, но не подходят для моих целей, поскольку, насколько я могу судить, они не поддерживают связанные ODE. Кроме того, в зависимости от своего начального состояния, каждый нейрон в моем моделировании принимает входные переменные, которые часто меняются от временного шага к временному шагу (например, информация о напряжении или пике от других имитированных нейронов или имитированных процессов ввода).

У меня есть прочитайте немного о векторизации в python («реальная» векторизация в отличие от функции np.vectorize), но я не могу сказать, будет ли это работать с итеративно сгенерированными входными переменными для каждого шага. Мне кажется, что векторизация требует, чтобы входные переменные уже существовали (как векторы!), Чтобы быть введенными в функцию в целом. Кто-нибудь может подтвердить, что я правильно понимаю?

Если векторизация не является * go, есть ли у кого-нибудь опыт численного моделирования в python с такими же потребностями, как у меня? какие-нибудь жемчужины мудрости?

...