for-Schleife mit dynamischen Variablen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
gobel
User
Beiträge: 5
Registriert: Donnerstag 9. Juni 2016, 17:01

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!
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
gobel
User
Beiträge: 5
Registriert: Donnerstag 9. Juni 2016, 17:01

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.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@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)
gobel
User
Beiträge: 5
Registriert: Donnerstag 9. Juni 2016, 17:01

Ähm, da ich in python noch ziemlich neu bin: könntest du das etwas erklären?
Antworten