python - 遍历列表以创建函数
问题描述
我正在尝试使用solve_ivp
.
from scipy import integrate
sol = integrate.solve_ivp(func_system, (0,100), initial_value_array, t_eval)
func_system
是一个取决于列表长度的微分方程组X
:
X = ['a','b','c','d',...]
K1, K2, K3, K4 = [1, 2, 2, 1]
def dadt(X,t):
return -K1*X[0]+K2*X[1]
def dbdt(X,t):
return K2*X[0]-(K2+K3+K4)*X[1]
def dcdt (X,t):
return ....
def dddt (X,t):
return ....
等等。
def func_system(X,t):
return np.array([dadt(X,t), dbdt(X,t), dcdt(X,t), dddt(X,t)])
因为 X 可能很长,所以我想遍历列表以创建函数名称。例如,
dxdt = ['d'+a+'dt' for a in X]
for i in range(len(dxdt)):
def dxdt[i]:
return something
,我会从数据框中得到“东西”。我的问题是是否可以遍历列表以创建函数名称?
解决方案
正如已经建议的那样,您可以简单地使用例如。dict 来完成这个。不是最优雅的解决方案,但绝对可行,即使所有函数共享相同的签名,也不会那么难看:
dispatch = {
'dadt': lambda X, t: -K1*X[0]+K2*X[1],
'dbdt': lambda X, t: K2*X[0]-(K2+K3+K4)*X[1],
# you get the idea
}
# later, eg. to call dadt(my_vector, t):
rval = dispatch["dadt"](my_vector, t)
# or, if you want to have pretty functions eg. that you call often, functions
# are just values too:
dadt = dispatch["dadt"]
dadt(my_vector, t)
推荐阅读
- grafana - 在 Grafana (InfluxDB) 中自动选择新行
- c# - Decrypt AES-256-CBC with PBKDF2 from OpenSSL in C#
- stripe-payments - Stripe - This customer has no attached payment source or default payment method
- gcc - 在柯南中同时使用clang和gcc构建?
- java - Primefaces TreeNode 文件浏览器
- excel - 如何从互操作excel范围中获取所有文本值?
- javascript - 如何避免在使用 laravel mix 时清除未使用的 javascript 代码
- python - 从 **char 到 python 列表
- python - 现有课程较少的 xgboost 增量训练
- angular - 缺少所需的请求正文 Spring boot Angular