2017-03-09 4 views
1

ich Pandas Datenrahmen haben, enthält folgende Felder:Expanding Bildfeld in einem Pandas Datenrahmen

ID TYPE_01 TYPE_02 SPRITE 
1 12  8  [Image] 
2 11  9  [Image] 
3 9  nan  [Image] 
4 3  12  [Image] 
5 8  nan  [Image] 

TYPE_01 und TYPE_02 sind Einstufungen auf das Bild, dass ich Maschine Lernmethoden zu klassifizieren werde versuchen, (I benutze sklearn). SPRITE enthält 64x64 HSV-Bilder, die ich der Trainingsmethode zuführen werde.

Ich versuche, die Bilder in einer großen 2D-Matrix von Dimensionen (# Records, 64 * 64 * 3) für die Verwendung in einer PCA-Dekomposition zu glätten, aber ich habe einige Probleme. Ich habe es geschafft, For-Schleifen für jeden Datensatz zu verwenden, aber ich denke, das ist ein wenig ineffizient (ich habe ein neues Array zugewiesen und einen Datensatz zugewiesen, um das abgeflachte Bild aufzuzeichnen).

Gibt es einen besseren Weg, dies mit Pandas/Numpy zu tun? Wenn ich die Form des Datenrahmens mit df.values.shape bekomme, bekomme ich eine (#Records,4), also half mir eine einfache Abflachung, Ravel oder Umformung über den ganzen Datenrahmen nicht.

Ich sah einige ähnliche Fragen Linie this one, aber sie nicht für diesen Fall gelten.

+0

Sind die Sprites 3d numpy Arrays? – James

+0

Ja. Sie sind (64 x 64 x 3) und haben die gleiche Dimension über alle Datensätze. – hemagso

Antwort

0

Sie können die Umformung von numpy auf die gesamte Sprites-Spalte anwenden, um sie zu glätten. (I erstellt Zufallsdaten her meine Sprites)

df.SPRITE.apply(lambda x: np.reshape(x, -1)) 

Out[1]: 
0 [202, 82, 70, 34, 134, 54, 231, 244, 107, 179,... 
1 [66, 14, 120, 18, 26, 57, 59, 2, 58, 109, 223,... 
2 [47, 227, 1, 102, 51, 110, 83, 220, 101, 161, ... 
Name: SPRITE, dtype: object 

Wenn Sie es als ein einziges numpy Array, können Sie die obige Ausgabe vstack

np.vstack(df.SPRITE.apply(lambda x: np.reshape(x, -1))) 

Out[2]: 
array([[202, 82, 70, ..., 145, 226, 97], 
     [ 66, 14, 120, ..., 42, 64, 48], 
     [ 47, 227, 1, ..., 87, 102, 156]]) 
0

passieren Versuchen

np.vstack([i.reshape(1, -1) for i in df.SPRITE.values.tolist()]) 

Unbestätigter Code, wie ich am Telefon bin

Verwandte Themen