2017-03-09 247 views
1

我有一個熊貓數據框,包含以下領域展開像場:在大熊貓數據幀

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和TYPE_02是在圖像分類,我會嘗試使用機器學習方法進行分類(我我正在使用sklearn)。 SPRITE包含一個64x64 HSV圖像,我將用於訓練方法。

我想在PCA分解中使用一個尺寸(#記錄,64 * 64 * 3)的大2D矩陣中的圖像,但我遇到了一些問題。我設法使用for循環遍歷每個記錄,但我認爲這可能有點低效(我分配了一個新數組,並通過記錄扁平圖像來分配記錄)。

有沒有更好的方法來做到這一點使用熊貓/ Numpy?如果使用df.values.shape得到數據幀的形狀,我會得到一個(#Records,4),所以對整個數據幀進行簡單的平坦化,拆散或重塑對我沒有幫助。

我看了一些類似的問題行this one,但他們並不適用於這種情況。

+0

精靈3d numpy數組? – James

+0

是的。它們是(64 x 64 x 3),並且在所有記錄中具有相同的維度。 – hemagso

回答

0

您可以將numpy的整形應用於整個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 

如果你想這一切作爲一個單一的numpy的陣列,可以將上面的輸出傳遞到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

嘗試

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

未經驗證的代碼,因爲我在手機上