如何将(N,N)形状数组重塑为(N,N,3)?实操np.dstack问题求解
解决Numpy数组从(N,N)重塑为(N,N,3)的问题
嘿,我来帮你搞定这个数组重塑的问题~ 你之前用np.dstack得到奇怪的形状,是因为用错了参数,咱们一步步来理清楚:
先说说你之前的错误
你写的patch = (2084, 2084)只是一个形状元组,并不是实际的二维数组。np.dstack的作用是把多个二维数组沿着第三轴堆叠,你传一个元组的话,它会把元组里的两个数值当成标量来处理,最后就得到了不符合预期的(1, 2084, 2084)形状。
正确的实现方法
根据你的需求,应该是想把单通道的二维数组扩展成三通道(比如把灰度图转成伪RGB图),这里有两种常用的方法:
方法1:用np.repeat扩展通道
先给原数组增加一个通道维度(变成(2084,2084,1)),再在通道轴上重复3次:
import numpy as np # 假设你的原数组是arr,形状为(2084,2084) arr = np.random.rand(2084, 2084) # 示例数组,替换成你的实际数组 arr_3ch = np.repeat(arr[..., np.newaxis], 3, axis=2) print(arr_3ch.shape) # 输出:(2084, 2084, 3)
解释:arr[..., np.newaxis]相当于给数组最后加一个维度,把形状从(H,W)变成(H,W,1);np.repeat(..., 3, axis=2)则是在第2个轴(通道轴)上把每个元素重复3次,最终得到三通道数组。
方法2:用np.dstack堆叠三个相同数组
如果你更习惯用np.dstack,可以直接把原数组重复三次作为参数传入:
arr_3ch = np.dstack([arr, arr, arr]) print(arr_3ch.shape) # 输出:(2084, 2084, 3)
这里np.dstack会把三个相同的二维数组沿着第三轴拼接,正好得到你想要的三维形状。
额外情况:如果有三个不同的通道数组
要是你手里有三个独立的(2084,2084)数组(分别对应R、G、B通道),直接把它们放进np.dstack的列表参数里就行:
arr_r = np.random.rand(2084, 2084) arr_g = np.random.rand(2084, 2084) arr_b = np.random.rand(2084, 2084) arr_rgb = np.dstack([arr_r, arr_g, arr_b]) print(arr_rgb.shape) # 输出:(2084, 2084, 3)
内容的提问来源于stack exchange,提问作者Sahil
相关产品推荐
相关产品推荐

