如何对NumPy人脸图像数组每50个样本提取前3个样本
解决方法
你可以通过重塑数组结构+切片的方式实现需求,步骤如下:
- 先将原数组重塑为按人物分组的结构:把300张图像拆分为6组(对应6个人),每组50张,形状变为
(6, 50, 224, 224, 3)。 - 对每个人物组取前3张图像:用切片
[:, :3, ...]保留每组的前3个元素,此时数组形状变为(6, 3, 224, 224, 3)。 - 最后将分组维度合并,重塑为目标形状
(18, 224, 224, 3)。
完整代码:
import numpy as np X = np.random.randint(255, size=(300, 224, 224, 3)) # 执行切片与重塑操作 X_new = X.reshape(6, 50, 224, 224, 3)[:, :3, ...].reshape(18, 224, 224, 3) # 验证形状 print(X_new.shape) # 输出 (18, 224, 224, 3)
补充说明
reshape(6, 50, 224, 224, 3):利用原数组的连续性,将一维的图像序列按每50个一组拆分,不改变数据顺序。[:, :3, ...]::表示保留所有人物组,:3表示取每组前3张,...表示保留后面所有维度(图像的高、宽、通道),等价于[:, :3, :, :, :]。- 最后一次
reshape将(6,3)的前两个维度合并为18,还原为一维的图像序列结构。
内容的提问来源于stack exchange,提问作者xnok
相关产品推荐
相关产品推荐

