如何将Python Pandas中像素列转为n_samples×48×48的NumPy数组
解决方案:将一维object数组转换为三维图像张量
你遇到的问题是因为dfemotrain['pic'].values返回的是object类型的一维数组,其中每个元素是独立的48×48 NumPy数组,所以划分后的X_train形状是(21750,),无法直接输入深度学习模型。以下是几种简单有效的解决方法:
方法1:直接堆叠已划分的数组
使用np.stack()将一维数组中的所有子数组沿着0轴堆叠,直接生成三维张量:
import numpy as np # 处理训练集和验证集 X_train = np.stack(X_train) X_val = np.stack(X_val) # 验证形状 print(X_train.shape) # 输出 (21750, 48, 48) print(X_val.shape) # 输出 (7250, 48, 48)
方法2:提前转换X为三维数组(更高效)
在划分数据集之前,就把pic列的数组转换为统一的三维数组,避免后续处理:
# 直接将Series中的数组转为三维NumPy数组 X = np.array(dfemotrain['pic'].tolist()) y = dfemotrain['emotion'].values # 再进行划分,此时X_train、X_val直接就是三维形状 X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.25, stratify=y, random_state=42)
额外优化建议
处理pixels列时,最好指定数据类型为float32(深度学习模型常用的数值类型),避免后续类型转换的开销:
dfemotrain['pic'] = dfemotrain['pixels'].apply(lambda x: np.array(x.split(), dtype=np.float32).reshape(48, 48))
内容的提问来源于stack exchange,提问作者GSandro_Strongs
相关产品推荐
相关产品推荐

