使用.T在python中解压列表?
我正在使用scipy的方法integrate.odeint来解决二阶LDE。该方法要求方程以两个未知量的两个一阶方程组的形式表示。方法使用.T在python中解压列表?,python,list,numpy,scipy,Python,List,Numpy,Scipy,我正在使用scipy的方法integrate.odeint来解决二阶LDE。该方法要求方程以两个未知量的两个一阶方程组的形式表示。方法 odeint(system_matrix,initial_conditions_matrix,time_values) 输出每个时间点的解向量的时间值。解向量的形式实际上是[u,u'],其中u是我感兴趣的变量。所以我只想画你。我在网上发现实现这一点的一种方法是使用 u,u'=odeint(system_matrix,initial_conditions_mat
odeint(system_matrix,initial_conditions_matrix,time_values)
输出每个时间点的解向量的时间值。解向量的形式实际上是[u,u'],其中u是我感兴趣的变量。所以我只想画你。我在网上发现实现这一点的一种方法是使用
u,u'=odeint(system_matrix,initial_conditions_matrix,time_values).T
但我不明白为什么会这样,以及最后的.t是什么意思?odeint(系统矩阵、初始条件矩阵、时间值)
是一个由两列组成的矩阵
为了能够获得第一列,首先使用.T
(转置),然后您就能够解压,因为元素的方向与您想要的方向相同
顺便说一句,我怀疑u'
是一个有效的变量名。我会:
u,_ = odeint(system_matrix,initial_conditions_matrix,time_values).T
因为您对第二个值不感兴趣。我想到的示例是:
>>> sol = odeint(pend, y0, t, args=(b, c))
The solution is an array with shape (101, 2). The first column is theta(t), and the second is omega(t). The following code plots both components.
>>>
>>> import matplotlib.pyplot as plt
>>> plt.plot(t, sol[:, 0], 'b', label='theta(t)')
>>> plt.plot(t, sol[:, 1], 'g', label='omega(t)')
sol[:,0]
选择sol的第一列
解包通常与返回元组的函数一起使用,例如:
def foo():
....
return [1,2,3],{3:3}
x, y = foo()
结果应该是x
是一个列表,y
是一个字典
但它与任何iterable一起工作,提供匹配的术语数量。例如,一个2行数组可以解压成2个数组
In [1]: x, y = np.arange(6).reshape(2,3)
In [4]: x,y
Out[4]: (array([0, 1, 2]), array([3, 4, 5]))
如果我创建了一个(3,2)数组,我需要x,y,z=…
或.T
因为我们可以索引列和行,所以解包在numpy
中没有太多使用。通常我们有太多的行要解包。但它的工作原理与基本Python的预期一样
出于好奇,transpose
可以在元组上工作
In [6]: np.transpose((x,y))
Out[6]:
array([[0, 3],
[1, 4],
[2, 5]])
这实际上是在np.argwhere
中使用的,它将np.where
生成的索引元组转换为具有与维度相同列数的数组。它的意思是“转置”。您是否尝试过odeint
文档中演示的列索引sol[:,0]
。添加unpack
在数组的第一个维度上迭代。@hpaulj您能详细说明一下吗?而且你的[:,0]
东西听起来更好,可以避免换位,对吗?