簡體   English   中英

帶有 Scipy 的數值:函數調用和編譯

[英]Numerics with Scipy: functions call and compiling

我是 Scipy 的數字新手。 特別是我想整合一個(復雜的)微分方程系統。 我注意到scipy.integrate.solve_ivp可以完成這項工作。 由於我的方程依賴於一些數值參數,我寫了一個構建器 class 來構建方程以及初始條件

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. 由於solve_ivp numerical_function多次,有沒有辦法編譯它以使計算過程更快?
  2. 在 numeric_function 的定義中,我是否應該限制一些更抽象的(但map numerical_function列表或列表理解上?
  3. 你還有什么建議可以給我嗎? 考慮到上述系統中的方程數量為數百個。

由於 numeric_function 將被solve_ivp調用多次,有沒有辦法編譯它以使計算過程更快?

你必須不讓 go 這樣做。 退后一步,您的假設似乎是“編譯”代碼總是比解釋 Python 快。 事實並非如此。 確實,像循環等簡單的事情在 Python 中比在 C 中慢,但這就是你不在 ZA7F5F35426B927411FC92317Z6 中編寫大循環的原因。 您寧願使用 numpy arrays 及其固有功能。 例如numpy.dot(a, b)比你自己在 C 中編寫的任何東西都要快得多,因為numpy.dot使用一些花哨的庫(BLAS,在這種情況下,你可以做得更好)。

在 numeric_function 的定義中,我是否應該限制一些更抽象的(但令人印象深刻的)事物,例如 map 在列表或列表理解上?

那是口味問題。

你還有什么建議可以給我嗎? 考慮到上述系統中的方程數量為數百個。

首先讓它工作,即使非常慢,然后嘗試找出你的代碼慢的地方,並嘗試改進那里。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM