如何将维度为60x72的图像Y追加到6752x60x72的图像栈数组X中
问题解决方法
核心失败原因
你之前操作失败的核心是没有选对拼接的轴,以及单张图像的维度没有和图像栈维度对齐:
np.dstack是沿**第三维(深度轴)**拼接,用它操作会得到(6752, 60, 144)的错误维度,不符合新增图像的需求- 直接用
np.append如果不指定拼接轴,会自动将数组扁平化得到一维结果,就算指定轴但Y维度没对齐也会报错
可行解决方案
方法1:使用np.concatenate(最通用)
先给单张图像Y新增一个样本维度,和X的维度对齐后,沿第一个轴(样本轴)拼接即可:
# 给Y新增第0维,从(60,72)变成(1,60,72),和X的维度匹配 Y_expanded = np.expand_dims(Y, axis=0) # 沿样本轴(axis=0)拼接,得到新的图像栈 X_new = np.concatenate([X, Y_expanded], axis=0)
操作后X_new.shape会输出(6753, 60, 72),符合预期。
方法2:使用np.vstack
也可以用垂直拼接函数,同样需要先给Y升维:
X_new = np.vstack([X, Y[np.newaxis, :, :]])
性能优化提示
如果后续需要频繁追加大量图像,不建议每次都用拼接操作:numpy数组是固定大小的,每次拼接都会重新申请整块内存、拷贝数据,效率很低。可以提前预分配足够大的数组,或者先把所有图像存在Python列表里,最后一次性转成numpy数组:
# 预分配方案示例:假设预计总共要存10000张图像 max_num = 10000 X = np.zeros((max_num, 60, 72), dtype=X.dtype) # 追加Y直接赋值到对应索引即可,不需要拼接 current_idx = 6752 X[current_idx] = Y current_idx += 1
内容的提问来源于stack exchange,提问作者CJSSSSS
相关产品推荐
相关产品推荐

