Hallo zusammen,
ich habe folgendes Problem. Ich generiere mit untenstehendem Code einen n-stelligen String den ich mit einer Bitfolge fülle. Diese n-stellige Bitfolge soll am Ende in einer Spalte eines Dataframes wieder zu finden sein. Also sprich ein Element (eine 0 oder 1) soll Inhalt einer Zelle des Dataframes befüllen. Hierzu hab ich leider trotz bester Recherche noch keinen Lösungsansatz gefunden. IN der switches_kvs_deletelist sind Einträge die aus PowerFactory augelesen werden, für hier ist jedoch nur die Menge der Einträge relevant.
Sollte jemand einen besseren Vorschlag haben dies zu lösen, bin ich für Vorschläge offen. Vielen Dank schonmal im voraus.
#Schleife zur Erstellung einer Schalterkonfiguration
switches_kvs_deletelist = [ ]
configuration_table = pd.DataFrame( )
anzahl_durchlauefe = 2**(len(switches_kvs_deletelist))
for i in range(0, anzahl_durchlauefe):
a = '{:b}'
print(a.format(i).zfill(len(switches_kvs_deletelist)))
Ausgabe:
configuration_table = pd.DataFrame()
anzahl_durchlauefe = 2**(len(switches_kvs_deletelist))
for i in range(0, anzahl_durchlauefe):
a = '{:b}'
print(a.format(i).zfill(len(switches_kvs_deletelist)))
00000000
00000001
00000010
.
.
00010110
u.s.w.
Nun möchte ich gerne jede Bitfolge in einer Spalte eines Dataframes haben. In etwa so:
Position Folge 1 Folge 2
0 1 0
1 0 1
2 0 0
3 0 0
4 0 0
5 0 0
6 0 0
7 0 0
Freue mich auf eure Kommentare!
Elemente eines String in die Spalte eines Dataframe einfügen
Das Erzeugen Deiner Ausgabe geht deutlich einfacher:
Wie Du Deinen Dataframe füllen willst, habe ich aber anhand des Beispiels nicht kapiert.
Ich rate mal, dass Du eigentlich das willst:
Code: Alles auswählen
bits = len(switches_kvs_deletelist)
for i in range(0, 2 ** bits):
print(f'{i:0{bits}b}')
Ich rate mal, dass Du eigentlich das willst:
Code: Alles auswählen
df = pd.DataFrame()
numbers = np.arange(2 ** bits)
for bit in range(bits):
df[bit] = (numbers & (2**bit) != 0).astype(int)
Danke für deine Rückmeldung.
Genau so meinte ich das, nur dass die Bitfolge in der Spalte steht und nicht in der Zeile, aber ich denke die Zeile kann ich ebenfalls abrufen!?
Hier noch ein paar zusätzliche Infos zu meinem Projekt: Jede Bitfolge steht für eine Kombination aus Schaltzuständen I/O. Was mich noch interessieren würde ist die Rechenzeit. Denkt ihr es ist realistisch bei 40 Schaltern eine annehmbare Rechenzeit zu erzielen? Es sind ja dann 2 hoch 40(etwa eine Billion) Schaltkombinationen die ich durch eine Schleife lassen muss. Diesen Kombinationen muss ich dann in der Schleife noch 2 Vergleiche(if-else) gegenüberstellen. Heisst, ich muss alle Objekte(etwa 200 bei 40 Schaltern) aus diesem Modell dieser Kombination überprüfen ob sie == True sind und ob sie bestimmte Parameter erfüllen.
Da eine(oder verschachtelte) Schleife ja wahrscheinlich nicht die beste Methode für sowas ist, hoffe ich jemand hat einen besseren Vorschlag.
Sorry für die Beschreibung, ich versuche meine Gedanken so gut es geht in Worte zu fassen.
Genau so meinte ich das, nur dass die Bitfolge in der Spalte steht und nicht in der Zeile, aber ich denke die Zeile kann ich ebenfalls abrufen!?
Hier noch ein paar zusätzliche Infos zu meinem Projekt: Jede Bitfolge steht für eine Kombination aus Schaltzuständen I/O. Was mich noch interessieren würde ist die Rechenzeit. Denkt ihr es ist realistisch bei 40 Schaltern eine annehmbare Rechenzeit zu erzielen? Es sind ja dann 2 hoch 40(etwa eine Billion) Schaltkombinationen die ich durch eine Schleife lassen muss. Diesen Kombinationen muss ich dann in der Schleife noch 2 Vergleiche(if-else) gegenüberstellen. Heisst, ich muss alle Objekte(etwa 200 bei 40 Schaltern) aus diesem Modell dieser Kombination überprüfen ob sie == True sind und ob sie bestimmte Parameter erfüllen.
Da eine(oder verschachtelte) Schleife ja wahrscheinlich nicht die beste Methode für sowas ist, hoffe ich jemand hat einen besseren Vorschlag.
Sorry für die Beschreibung, ich versuche meine Gedanken so gut es geht in Worte zu fassen.
Das Ergebnis soll sein, dass ideale Schaltkombinationen gefunden werden. Also sprich Schalter 3,4,9 und 17 auf 1 und der Rest auf 0 als Bitfolge 00011000010000...u.s.w.
Die idealen Schaltkombinationen sollen sowohl bewirken, dass alle Elemente darin "aktiviert" sind("IsEnergized == True", das heisst, dass dadurch alle bestromt werden und dass alle nur von einem Signal("len(Signal) == 1") angefahren werden(Es gibt von mehreren Seiten mehrere Signale - vermaschtes Netz). Es soll am Ende bewirkt werden, dass in dem Schaltplan jedes Objekt(Leitung, Lampe, Schalter, e.t.c) nur noch von einem Signal bedient wird(nicht vermaschtes Netz). Hierzu muss ich einen Algorithmus entwickeln, der die idealen Schalterstellungen in einem Schaltplan findet. Es sind überall an Knotenpunkten in dem Plan, Schalter angebracht.
Sorry das Thema ist etwas komplex, daher tu ich mir mit der Formulierung auch etwas schwer!
Die idealen Schaltkombinationen sollen sowohl bewirken, dass alle Elemente darin "aktiviert" sind("IsEnergized == True", das heisst, dass dadurch alle bestromt werden und dass alle nur von einem Signal("len(Signal) == 1") angefahren werden(Es gibt von mehreren Seiten mehrere Signale - vermaschtes Netz). Es soll am Ende bewirkt werden, dass in dem Schaltplan jedes Objekt(Leitung, Lampe, Schalter, e.t.c) nur noch von einem Signal bedient wird(nicht vermaschtes Netz). Hierzu muss ich einen Algorithmus entwickeln, der die idealen Schalterstellungen in einem Schaltplan findet. Es sind überall an Knotenpunkten in dem Plan, Schalter angebracht.
Sorry das Thema ist etwas komplex, daher tu ich mir mit der Formulierung auch etwas schwer!
Und genau je nach konkretem Problem gibt es Lösungsmethoden, die nicht alle Kombinationen durchprobieren müssen. Und auch wenn man alle Kombinationen durchprobiert, so ist es unnötig dafür extra ein Dataframe zu erzeugen. Aufsteigende Zahlen kann man leichter berechnen als sie zu speichern.
Also wenn die Validierung einer deiner Kombinationen nur eine Millisekunde dauert, rechnest du schon ~35 Jahre. Das also als Blackbox-Problem zu behandeln ist kein gangbarer Weg. Du solltest in deinen Algorithmus als das Wissen um die Gestalt des Netzwerkes einfließen lassen.
Für mich klingt das ganze nach einem SAT-Problem, und das ist NP vollständig. Siehe https://de.wikipedia.org/wiki/Erf%C3%BC ... sagenlogik
Dort sind auch Wege beschrieben, wie man unter Kenntnis des Netzwerkes Lösungen finden kann.
Für mich klingt das ganze nach einem SAT-Problem, und das ist NP vollständig. Siehe https://de.wikipedia.org/wiki/Erf%C3%BC ... sagenlogik
Dort sind auch Wege beschrieben, wie man unter Kenntnis des Netzwerkes Lösungen finden kann.