如何将4D图像数组与1D标签数组合并为指定结构的2D数组?
解决不同形状数组的合并问题
要实现你需要的数组合并,直接使用np.stack、np.concatenate等常规方法行不通——这些方法要求待合并数组的维度在拼接轴之外完全匹配,而你的A是4D数组、B是1D数组,无法直接对齐维度。
正确的做法是使用object类型的numpy数组,这种数组允许每个元素存储任意类型的对象(包括不同形状的数组或单个整数),正好满足你的需求:
import numpy as np # 假设A和B已定义 C = np.empty((A.shape[0], 2), dtype=object) # 将A中的每个3D图像分配到C的第一列 C[:, 0] = A # 将B中的每个标签分配到C的第二列 C[:, 1] = B
验证结果:
print(C.shape) # 输出 (800, 2) print(C[0][0].shape) # 输出 (3, 100, 100) print(type(C[0][1])) # 输出 <class 'int'>
补充说明
如果你能接受C的形状为(800,)而非(800,2),也可以使用结构化数组,这种方式在内存效率上可能更优:
# 定义结构化数据类型:一个存储3D图像的字段,一个存储整数标签的字段 dtype = [('image', np.float64, (3, 100, 100)), ('label', np.int32)] C = np.empty(A.shape[0], dtype=dtype) C['image'] = A C['label'] = B # 访问方式 print(C[0]['image'].shape) # (3, 100, 100) print(type(C[0]['label'])) # <class 'numpy.int32'>
内容的提问来源于stack exchange,提问作者Hally
相关产品推荐
相关产品推荐

