2016-04-23 8 views
0

Ich versuche einen Zustandsvektor zu erstellen, der die Positionen und Geschwindigkeiten einer Reihe von Partikeln darstellt zu einer bestimmten Zeit für eine Simulation. Ich habe individuelle Vektoren x, y, vx, vy erstellt, die den Wert dieser Variablen für jedes Partikel angeben. Gibt es eine gute Möglichkeit, sie automatisch zu einem Array zu kombinieren, das alle Informationen für Partikel eins enthält, gefolgt von allen Informationen für Partikel zwei usw.? DankePython-Array aus dem ersten Element von Array 1, dem ersten Element von Array 2, dem zweiten Element von Array 1, dem zweiten Element von Array 2 usw. erstellen

Antwort

1

Meinst du das?

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)] 

wenn Sie mit Python 3, müssen Sie c = list(zip(x, y, vx, vy)) verwenden.

Wenn Sie nicht die Werte für jeden in ein Tupel gruppiert Teilchen wollen wie das aus irgendeinem Grund, könnte das Ergebnis abgeflacht werden:

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] 

jedoch, würde ich empfehlen, nur „Benennung“ der stattdessen Tupel:

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) 

Ausgang:

[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)] 

Auf diese Weise können Sie die Felder nach Namen referenzieren - d. H. c[1].x - was den nachfolgenden Code und die Berechnungen viel lesbarer machen könnte.

+0

Ja, das ist, was ich bekommen habe. Vielen Dank. Wird die Tatsache, dass die neue Liste gruppiert ist (wie die Klammern angeben), Auswirkungen auf zukünftige Berechnungen haben? –

+0

Dies erzeugt eine Liste von Tupeln, so dass die Information für das erste Teilchen in 'c [0]' ist, wobei 'c [0] [0]' der 'x' Wert des ersten Teilchens ist, c [0] [ 1] 'ist sein' y'Wert usw. Die Information für das zweite Teilchen ist in 'c [1]'. Dies wirkt sich nicht auf zukünftige Berechnungen aus, solange Sie auf die Werte korrekt zugreifen. Wenn das zu mühsam ist, könnte es verbessert werden, um verschiedene Unterobjekte zu erzeugen. Beantwortet meine Antwort Ihr Problem? (Bitte lesen Sie [_Was soll ich tun, wenn jemand meine Frage beantwortet?] (Http://stackoverflow.com/help/someone-answers)) – martineau

+0

Ich denke, es tut. Gibt es eine Möglichkeit, dasselbe zu tun, ohne dass es eine Liste von Tupeln ist? d.h. nur die einzelnen Zahlen in der Anordnung –

Verwandte Themen