Seite 1 von 1
Brauche kurz eine comprehensions übersetzung
Verfasst: Freitag 11. November 2011, 02:13
von Arp
Hi,
Ich will eine for schleife in eine comprehension übersetzen, der schnelligkeit halber, aber ich steh bei der syntax grad aufm schlauch....
ich hab die variable data, ein 3 dimensionales array. data[x][y][z] wobei jede dimension ein paar hundert einträge hat.
nun will ich eine Liste raus schreiben die aus den werten einer speziellen dimension besteht.
mIttels for schleife würde das lauten:
Code: Alles auswählen
liste = []
for z in range(0,100):
liste.append(data[0][0][z])
ich war nun eigentlich der Meinung das man das in folgendes übersetzen kann:
Aber da krieg ich ständig "invalid index".
Könnt ihr mir da mal grad sagen wie die richtige Übersetzung dieser for schleife lautet?
thx.
Re: Brauche kurz eine comprehensions übersetzung
Verfasst: Freitag 11. November 2011, 07:58
von noisefloor
Hallo,
mIttels for schleife würde das lauten:
Als bei mir wirft dies Schleife einen "Type Error"... Mit [z] rufst die auch das z-te Elemente der Liste auf - welches es ja nicht gibt, weil die Liste leer ist.
Eine List-Comprehension funktioniert z.B. so:
Code: Alles auswählen
>>> [[0,0,x] for x in range(0,10)]
[[0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 0, 3], [0, 0, 4], [0, 0, 5], [0, 0, 6], [0, 0, 7], [0, 0, 8], [0, 0, 9]]
Gruß, noisefloor
Re: Brauche kurz eine comprehensions übersetzung
Verfasst: Freitag 11. November 2011, 08:59
von BlackJack
@Arp: Was ist `data` denn für ein Typ? Bei mehreren hundert Einträgen pro Dimension würde ich mal ein Auge auf `numpy` werfen, denn soviel schneller ist eine „list comprehension“ (LC) dann auch nicht. Schleifen von dem Ausmass würde ich mittels `numpy`-Arrays und „slicing“ umsetzen. Die passieren dann in C oder Fortran, oder unter Umständen sogar *gar nicht*, denn nach Möglichkeit wird bei `numpy` nur eine andere Sicht auf die Originaldaten erzeugt in dem in dem neuen Objekt andere Werte für Versatz, „strides“, usw. gespeichert werden. Vielleicht meintest Du „slicing“ ja sogar, denn eine LC hast Du gar nicht gezeigt.
Re: Brauche kurz eine comprehensions übersetzung
Verfasst: Freitag 11. November 2011, 10:11
von bords0
Arp hat geschrieben:
ich hab die variable data, ein 3 dimensionales array. data[x][y][z] wobei jede dimension ein paar hundert einträge hat.
nun will ich eine Liste raus schreiben die aus den werten einer speziellen dimension besteht.
mIttels for schleife würde das lauten:
Code: Alles auswählen
liste = []
for z in range(0,100):
liste.append(data[0][0][z])
ich war nun eigentlich der Meinung das man das in folgendes übersetzen kann:
Seltsam. Die direkte Übersetzung wäre doch (ungetestet)
Vermutlich willst du sogar ":" statt "0:100" schreiben.
Re: Brauche kurz eine comprehensions übersetzung
Verfasst: Freitag 11. November 2011, 11:01
von Arp
Danke für eure Hilfe!
@noisefloor
Das würde nicht das Ergebnis ausspucken das ich haben will. Das gibt ja eine liste aus tupeln, während ich nur eine Liste aus zahlen dieser letzten Dimension wollte.
@Blackjack
Streng genommen ist das Array etwas komplexer... es ist eine liste aus Fits_records, falls dir das was sagt. Ein element besteht aus 10 einträgen, und eins davon ist nochmals ein array. Dessen Einträge sind dann alles 32bit floats.
Werd mir mal numpy slices angucken... ich erinner mich das ich neulich mal nach slices gegoogelt hab, aber da nicht wirklich fündig wurde.
@bords0
Danke! Ich könnte aber schwören das ich das gestern ausprobiert hatte und es nicht funktioniert hat....
Liegt das vll an unterschiedlichen Python Versionen? Zuhause in Ubuntu 10.04 hab ich python 2.6, hier aber python 2.7.
Re: Brauche kurz eine comprehensions übersetzung
Verfasst: Freitag 11. November 2011, 11:57
von noisefloor
Hallo,
Liegt das vll an unterschiedlichen Python Versionen
Nein.
Gruß, noisefloor