Listen-/Array-Formatierung

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
Twantie
User
Beiträge: 10
Registriert: Mittwoch 18. Dezember 2019, 09:24

Hallo Hallo,

irgendwie hat sich der Output der hsplit Methode in meinem Code geändert.

Ich habe folgende Liste

Code: Alles auswählen

values = [0, 0, 0, 0, 71, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 98, 0, 
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 243, 163, 139, 0, 0, 112, 5]
Ich möchte nun aus dieser Liste eine neue Liste, oder Array erzeugen, in dem alle Werte als 2er Pakete, und ein 4er Paket gespeichert werden, also der optimale Output wäre dann folgender:

Code: Alles auswählen

final_list = [(0, 0), (0, 0), (71, 146), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (95, 98), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (193, 243, 163, 139), (0, 0), (112, 5)]
Probiert habe ich es per NumPy Arrays:

Code: Alles auswählen

value_array = np.array(values)
value_array_s = value_array.reshape(28,2)
und dann nochmal gesplittet mit

Code: Alles auswählen

splitted_array = np.hsplit(value_array_s, (48,52,54))
Ich hatte anfangs einen Output wie ich ihn haben wollte, zumindest ähnlich, und als ich die Zelle im Jupyter Notebook neu ausgeführt habe, kam als Output folgendes:

Code: Alles auswählen

[array([[  0,   0],
       [  0,   0],
       [ 91, 156],
       [  0,   0],
       [  0,   0],
       [  0,   0],
       [  0,   0],
       [  0,   0],
       [  0,   0],
       [  0,   0],
       [  0,   0],
       [  0,   0],
       [  0,   0],
       [  0,   0],
       [ 94,  97],
       [  0,   0],
       [  0,   0],
       [  0,   0],
       [  0,   0],
       [  0,   0],
       [  0,   0],
       [  0,   0],
       [  0,   0],
       [  0,   0],
       [193, 233],
       [163, 119],
       [  0,   0],
       [122,   4]], dtype=int16), array([], shape=(28, 0), dtype=int16), array([], shape=(28, 0), dtype=int16), array([], shape=(28, 0), dtype=int16)]
Hat jemand eine Ahnung was schief gelaufen sein könnte, oder hat eine bessere Idee wie ich zum gewünschten Output komme?

Grüße
Zuletzt geändert von Twantie am Montag 27. Juli 2020, 11:10, insgesamt 1-mal geändert.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Äääh... woran unterscheidest du denn, wann die Werte in einen 2er und wann in einen 4er Tuple kommen sollen?
Twantie
User
Beiträge: 10
Registriert: Mittwoch 18. Dezember 2019, 09:24

sparrow hat geschrieben: Montag 27. Juli 2020, 11:08 Äääh... woran unterscheidest du denn, wann die Werte in einen 2er und wann in einen 4er Tuple kommen sollen?
An der Stelle wo sich die Werte befinden. Es handelt sich um Bytes und an der Stelle des 4er Tuples sollte ein Datum stehen.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Verstehe ich nicht.
Es befinden sich ja an mehreren Stellen Werte. Ist das Zufall? Ist die Aufteilung immer gleich? Ist die Länge der Liste immer gleich?
Twantie
User
Beiträge: 10
Registriert: Mittwoch 18. Dezember 2019, 09:24

Die Länge der Liste ist immer gleich und die Aufteilung ist auch immer die folgende:

Code: Alles auswählen

[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2]
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Woher kommt denn die Liste? Sind das in Wirklichkeit 24 16bit Werte, gefolgt von einem 32bit-Wert und zwei weiteren 16bit-Werten? Dann benutzt man struct.unpack auf den Bytes, bevor nan daraus eine Liste macht.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Dann ist das ja nicht wirklich nötig das Anhand von Werten in den Daten zu splitten. Man könnte es beispielsweise erst einmal zu Pärchen zusammenfassen und dann noch mal das vorvorletzte Pärchen zu einem Quadrupel.

Wobei sich die Frage stellt was diese Pärchen am Ende eigentlich sein sollen — 16 Bit-Zahlen? Und wo kommen die Daten her?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Twantie
User
Beiträge: 10
Registriert: Mittwoch 18. Dezember 2019, 09:24

Die Daten kommen aus einem Eeprom. Alle Pärchen sind 16Bit Zahlen mit Ausnahme des 4er Tuples
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Twantie: Na dann was Sirius3 geschrieben hat.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten