使用.T在python中解压列表?

使用.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

我正在使用scipy的方法integrate.odeint来解决二阶LDE。该方法要求方程以两个未知量的两个一阶方程组的形式表示。方法

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]
东西听起来更好,可以避免换位,对吗?