Python:如何将两个(50,50,3)数组拼接为(2,50,50,3)维度数组?
解决Numpy数组拼接成批量图像维度的问题
嘿,我来帮你搞定这个数组拼接的问题!你的需求是把两个形状为(50,50,3)的图像数组,拼成维度为(2,50,50,3)的批量数组(其中2代表两张图像),核心问题就是先给每个数组新增一个维度,让它们的维度结构匹配后再进行拼接。下面给你几种实用的方法:
方法一:用np.expand_dims新增维度后拼接
先通过np.expand_dims给每个数组在第0位新增一个维度,把(50,50,3)转换成(1,50,50,3),再用np.concatenate沿着第0轴拼接:
import numpy as np # 假设你的两个图像数组是cat01和cat02 cat01_expanded = np.expand_dims(cat01, axis=0) # 形状变为(1,50,50,3) cat02_expanded = np.expand_dims(cat02, axis=0) # 沿着第0轴拼接,得到目标形状 result = np.concatenate((cat01_expanded, cat02_expanded), axis=0)
方法二:用np.newaxis快速新增维度
这是更简洁的写法,用np.newaxis直接在数组索引中插入新维度,配合...保留原有所有维度:
result = np.concatenate((cat01[np.newaxis, ...], cat02[np.newaxis, ...]), axis=0)
这里的...等价于:,:,:,用来简化多维数组的索引写法。
方法三:用np.stack一步到位(最推荐)
np.stack方法会自动帮你完成「新增维度+拼接」的操作,直接把两个数组在指定轴上堆叠,一步得到目标形状:
result = np.stack((cat01, cat02), axis=0)
执行后result的形状就是你想要的(2,50,50,3),非常省心!
为什么之前的拼接没得到预期结果?
你之前直接用np.concatenate时,两个数组都是3维的:
axis=0是沿着第一个维度(图像高度)拼接,所以把50+50变成100,得到(100,50,3);axis=1是沿着第二个维度(图像宽度)拼接,得到(50,100,3)。
只有先把数组变成4维,让它们的结构是(1,50,50,3),再沿着第0轴拼接,才能把两个1合并成2,得到批量图像的维度结构。
内容的提问来源于stack exchange,提问作者Marwan Mostafa
相关产品推荐
相关产品推荐

