从数组1的第一个元素,数组2的第一个元素,数组1的第二个元素,数组2的第二个元素等创建python数组

时间:2016-04-23 14:53:48

标签: python arrays

我正在尝试创建一个状态向量,表示在给定时间内一系列粒子的位置和速度,以进行模拟。我创建了单独的向量x,y,vx,vy,它们给出了每个粒子的变量值。有没有一种很好的方法可以自动将它们组合成一个数组,其中包含粒子1的所有信息,然后是粒子二的所有信息等等)?感谢

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 - 这可以使后续代码和计算更具可读性。