我有一个包含以下字段的Pandas Dataframe:
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图像,我将提供给培训方法。
我试图在一个大尺寸的二维矩阵(#Records,64 * 64 * 3)中展平图像,以便在PCA分解中使用,但我遇到了一些问题。我设法在每条记录上使用for循环,但我认为这可能有点低效(我分配了一个新数组,并通过记录分配了平坦图像的记录)。
使用Pandas / Numpy有更好的方法吗?如果使用df.values.shape
得到数据框的形状,我会得到一个(#Records,4)
,因此对整个数据框进行简单的展平,拉平或重塑并没有帮助我。
我看了一些类似的问题this one行,但它们并不适用于这种情况。
答案 0 :(得分:0)
您可以将numpy的整形应用于整个Sprite列以展平它们。 (我为我的精灵创建了随机数据)
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]])
答案 1 :(得分:0)
尝试
np.vstack([i.reshape(1, -1) for i in df.SPRITE.values.tolist()])
我在电话中未经验证的代码