2016-04-23 105 views
0

我試圖創建一個狀態向量,表示一系列粒子的位置和速度在給定的時間,進行模擬。我創建了單個向量x,y,vx,vy,它們給出了每個粒子的變量值。有沒有一種自動將它們組合成一個數組的好方法,其中包含第一個粒子的所有信息,第二個粒子的所有信息等等)?謝謝從數組1的第一個元素,數組2的第一個元素,數組1的第二個元素,數組2的第二個元素等創建python數組

回答

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 - 這可以使後續代碼和計算更加可讀。

+0

是的,這就是我正在得到的。非常感謝。將新列表分組的事實(如括號所示)是否對未來的計算有任何影響? –

+0

這創建了元組列表,因此第一個粒子的信息在'c [0]'中,其中'c [0] [0]'是第一個粒子的''x'值,'c [0] [ 1]'是它的'y'value等。第二個粒子的信息在'c [1]'中。只要您正確訪問這些值,這將不會影響將來的計算。如果這太麻煩,可以改進以創建不同的子對象。我的答案能解決你的問題嗎? (請參閱[我應該怎麼做當有人回答我的問題?](http://stackoverflow.com/help/someone-answers)) – martineau

+0

我認爲它。沒有任何方法做同樣的事情,而不是一個元組列表?即只是陣列中的單個數字 –

相關問題