【发布时间】:2019-06-20 22:26:51
【问题描述】:
我想使用一个数组作为函数的参数,该函数将用于求解 ODE 函数。
def ode(x, t, read_tau, tau_arr):
q_ib = x[0:4]
omega = x[4:7]
dq_ib = 0.5 * np.dot(gen_omega(omega), q_ib) + read_tau(tau_arr)
return dq_ib
dq_ib = odeint(rhs, x0, t, args=(b_I, read_tau, tau_arr))
而 tau_arr 是一个 (1000, 3) 数组。我能想到的唯一解决方案是首先将 tau_arr 作为迭代器并在 read_tau() 中。
def read_tau(tau_arr):
return next(tau_arr)
read_tau 函数的返回值将是一个 1x3 数组,用于求解 ODE。
我的问题是如何将二维数组转化为迭代器,当用next()调用迭代器时,会逐行返回一个数组。
a = np.array([[1,2,3], [4,5,6]])
convert_to_iter(a)
next(a)
[1,2,3]
next[a]
[4,5,6]
【问题讨论】:
-
为什么不只是一个
for循环? -
因为如果我在 read_tau() 中使用 for 循环,它将无法在 ODE 时间步返回值。我实际上不知道 odeint 是如何工作的。我只是想确保每当 odeint 访问 tau_arr 时,它将一次访问一行。
-
你试过
tau_arr = iter(raw_tau_array)吗? -
它有效。谢谢。
-
odeint 使用具有自适应时间步长的预测校正方法。即使它有效,你的方法也将毫无用处。如果您还有采样时间列表,唯一明智的方法是插入 tau_arr。
标签: python arrays numpy iterator ode