You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 12:22:05