Seite 1 von 1

for-Schleife mit dynamischen Variablen

Verfasst: Donnerstag 9. Juni 2016, 17:12
von gobel
Hallo!

Ich habe das Problem, dass ich ein großes Numpy-Array (viele Zeilen) in Teil-Arrays unterschiedlicher länge zerlegen möchte und diese Arrays jeweils in einer eigenen Variable ablegen möchte. Da die Zeilen, an denen das Haupt-Array getrennt werden soll, von den darin gespeicherten Daten abhängt, scheint mir das mit Indizierung nicht zu funktionieren.

Die einzige Möglichkeit, welche mir bisher untergekommen ist, ist eine for-Schleife mit dynamischen Variablen, welche den Bereich prüft und die Daten dann in eine Variable schreibt, die vom Laufindex abhängt. Das Problem ist nun, dass überall zu lesen ist, dass man dynamische Variablen tunlichst vermeiden soll.


Daher zwei Fragen:

1. Warum soll man dyn. Variablen in einem Script, dass nur einmal durchläuft ohne Benutzereingaben zu verlangen denn unbedingt vermeiden. Sie sind zwar dynamisch aber trotzdem eindeutig?!?

2. Wie macht man so etwas am sinnvollsten?


Danke!

Re: for-Schleife mit dynamischen Variablen

Verfasst: Donnerstag 9. Juni 2016, 17:17
von Sirius3
@gobel: am sinnvollsten vermeidet man dynamische Variablen, indem man eine passende Datenstruktur benutzt. Also bei Dir wahrscheinlich ein Wörterbuch, dessen Schlüssel die Trennkriterien sind. Oder eine Liste, wenn da irgendwas abgearbeitet wird. Um zu sagen, wie Du genau am besten trennst, müßtest Du nochmal genauer beschreiben, was da indiziert werden soll und wie die Bedingungen sind.

Re: for-Schleife mit dynamischen Variablen

Verfasst: Donnerstag 9. Juni 2016, 19:28
von gobel
Hier mal ein Beispiel:

Code: Alles auswählen

import numpy as np

x = np.linspace(0,1000,1001)

ls = [0,24,456,786,907,len(x)-1] # Berechnete Grenzen

for i in range(len(ls)-1):
        globals()['variable{}'.format(i)] = x[ls[i]:ls[i+1]+1]

ls2 = [variable0,variable1,variable2,variable3,variable4]

print(ls2)
Die Grenzen sind hier jetzt mal gegeben. Die Zahlen geben die Indizes des Ausgangsarrays an, an denen getrennt werden soll.

Zwei Probleme ergeben sich hier:

1. Die dynamischen Variablen
2. ich hätte die Variablen gerne in einer neuen Liste, Problem: Mit den Globals funktioniert append() nicht.

Re: for-Schleife mit dynamischen Variablen

Verfasst: Donnerstag 9. Juni 2016, 19:39
von Sirius3
@gobel: der Zwischenschritt über die globalen dynamischen Variablen ist genauso unnötig wie umständlich und schwer zu lesen.

Code: Alles auswählen

import numpy as np
 
x = np.arange(1001)
 
ls = [0,24,456,786,907,len(x)-1] # Berechnete Grenzen

ls2 = [
    x[start:stop+1]
    for start, stop in zip(ls, ls[1:])
]
 
print(ls2)

Re: for-Schleife mit dynamischen Variablen

Verfasst: Donnerstag 9. Juni 2016, 20:02
von gobel
Ähm, da ich in python noch ziemlich neu bin: könntest du das etwas erklären?