Listen

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
MacerPacer
User
Beiträge: 8
Registriert: Dienstag 19. Januar 2021, 10:30

Hey, ich bereite gerade meine Daten vor, um sie in ein Modell zu geben.

Code: Alles auswählen

fail=[]

y = []
y.append(first[0][0])

z = []


for i in range(len(first)):
    if first[i][0] == y[0]:
        z.append(first[i][1])
        
    else:
        fail.append(z)
        for r in range(15-len(z)):
            z.append('0')
        z = []
        y[0]=first[i][0]
        z.append(first[i][1])
        
        

defe=[]

y = []
y.append(second[0][0])

s = []


for i in range(len(second)):
    if second[i][0] == y[0]:
        s.append(second[i][1])
        
    else:
        defe.append(s)
        for t in range(6-len(s)):
            s.append('0')
        s = []
        y[0]=second[i][0]
        s.append(second[i][1])

        
#print(defe)
            

X = np.array(fail,dtype=object)
y = np.array(defe,dtype=object)

print(X)
print(y)



print(X.shape, y.shape)
# summarize first few examples
for i in range(10):
	print(X[i], y[i])
    
    
print(X.shape[1])
Obwohl beide Listen 'defe' und 'fail' vom selben Typ sind, ist die Ausgabe von X und y unterschiedlich. Auch die Ausgabe mit dem Befehl shape ist unterschiedlich.

Für x wird ausgegeben:

[list([41, 88, '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'])
list([3, '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'])
list([3, '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'])
...
list([425, 433, 446, '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'])
list([139, 426, 433, 446, '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'])
list([120, 208, 204, 250, 244, 426, 430, 433, 446, 473, '0', '0', '0', '0', '0'])]

und für y:

[[364 '0' '0' '0' '0' '0']
[144 '0' '0' '0' '0' '0']
[144 '0' '0' '0' '0' '0']
...
[460 498 '0' '0' '0' '0']
[510 '0' '0' '0' '0' '0']
[510 '0' '0' '0' '0' '0']]

Wisst Ihr woran das liegt, denn für das Modell müssen beide listen den selben shape haben.

Danke für eure Antworten,

Lukas
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Erstmal muß ich den Code verstehen, der ist sehr kompliziert geschrieben. Statt eines Index iteriert man direkt über die Elemente der `first`-Liste.
Warum ist y eine Liste? Soweit ich das sehe, hat die immer nur ein Element, das geändert wird.
Warum fügst Du den String "0" an, statt der Zahl. Das sieht nicht richtig aus.
Das letzte z wird gar nicht verwendet. Sieht auch nach Fehler aus.
Die Namen sind auch sehr schlecht, da man sich unter first, y oder z nichts vorstellen kann.
Mal verständlich:

Code: Alles auswählen

fail=[]
z = []
y = first[0][0]
for row in first:
    if row[0] != y:
        z.extend([0] * (15 - len(z)))
        fail.append(z)
        z = []
    y = row[0]
    z.append(row[1])
z.extend([0] * (15 - len(z)))
fail.append(z)
Und dann sieht man auch gleich, dass Du eigentlich itertools.groupby benutzen willst.

Code: Alles auswählen

import operator
from itertools import groupby

fail = []
for _, values in itertools.groupby(first, key=operator.itemgetter(0)):
    z = [y[1] for y in values]
    z.extend([0] * (15 - len(z)))
    fail.append(z)
Für second gilt natürlich das selbe. Was soll passieren, wenn in z mal mehr als 15 Elemente schon drin sind. Dann funktioniert ja das Auffüllen mit 0en nicht mehr.
Und das ist der Grund, warum im einen Fall die Listen nicht als Array entpackt werden könnnen; weil die Listen unterschiedlich lang sind.

Dann ist es unüblich, dass man numpy-Arrays vom Typ object hat, da Du ja offensichtlich nur mit Zahlen arbeitest.
MacerPacer
User
Beiträge: 8
Registriert: Dienstag 19. Januar 2021, 10:30

Danke für deine Verbesserungen an dem Programm.

Aber damit ist mein Problem ja nicht behoben. Das shape ist immernoch nicht das selbe. Weißt du oder wer anders, wie ich das hinbekomme?

LG Lukas
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Das Problem kannst nur Du beheben, denn es besteht ja darin, dass Deine Annahmen nicht stimmen.
Antworten