我正在尝试创建一个状态向量,表示在给定时间内一系列粒子的位置和速度,以进行模拟。我创建了单独的向量x,y,vx,vy,它们给出了每个粒子的变量值。有没有一种很好的方法可以自动将它们组合成一个数组,其中包含粒子1的所有信息,然后是粒子二的所有信息等等)?感谢
答案 0 :(得分:1)
你的意思是这样吗?
x = [0, 1, 2]
y = [3, 4, 5]
vx = [6, 7, 8]
vy = [9, 10, 11]
c = zip(x, y, vx, vy)
print(c) # -> [(0, 3, 6, 9), (1, 4, 7, 10), (2, 5, 8, 11)]
如果您使用的是Python 3,则需要使用c = list(zip(x, y, vx, vy))
。
如果您不希望由于某种原因将每个粒子的值分组为这样的元组,结果可能会变平:
c = [item for group in zip(x, y, vx, vy) for item in group]
print(c) # -> [0, 3, 6, 9, 1, 4, 7, 10, 2, 5, 8, 11]
然而,我建议只是"命名"而是元组:
from collections import namedtuple
Particle = namedtuple('Particle', 'x, y, vx, vy')
c = [Particle._make(group) for group in zip(x, y, vx, vy)]
print(c)
输出:
[Particle(x=0, y=3, vx=6, vy=9),
Particle(x=1, y=4, vx=7, vy=10),
Particle(x=2, y=5, vx=8, vy=11)]
通过这种方式,您可以按名称引用字段 - 即c[1].x
- 这可以使后续代码和计算更具可读性。