numpy ndarray的解释

时间:2019-02-27 19:35:58

标签: python numpy numpy-ndarray

假设我要在一个numpy 3-D数组中表示一个具有3个颜色通道(RGB)的尺寸为H * W的图像,因此尺寸为(H,W,3)。让我们以(4,2,3)的简单示例为例。因此,我们创建了一个像这样的数组-img = np.arange(24).reshape(4,2,3)

为了与上述图像示例相似,元素的值应为-

Channel R: [0,1],[2,3],[4,5],[6,7]
Channel G: [8,9],[10,11],[12,13],[14,15]
Channel B: [16,17],[18,19],[20,21],[22,24]

即3个外部数组和上面嵌套在内部的数组。

但是,np.arange(24).reshape(4,2,3)的结果是-

array([[[ 0,  1,  2],
        [ 3,  4,  5]],

       [[ 6,  7,  8],
        [ 9, 10, 11]],

       [[12, 13, 14],
        [15, 16, 17]],

       [[18, 19, 20],
        [21, 22, 23]]])

如果我想要第一个频道的第一行,即img[0,:,0],我希望结果为[0,1],但实际上我会得到[0,3]。

我知道,如果我初始化形状为(3,4,2)的ndarray,我将得到想要的东西。但是我想使用(H,W,depth)的常规形状。

您能帮我理解我的理解上的空白吗?

1 个答案:

答案 0 :(得分:2)

我认为您的误解是因为您(错误地)假设从向量到数组的转换首先开始填充第一个索引。实际上,它从最后一个索引开始并向前移动。 在您的示例中,数组填充的顺序为

0-> [0,0,0]

1-> [0,0,1]

2-> [0,0,2]

3-> [0,1,0] 等等

因此,第一个像素为[0,1,2],第二个像素为[3,4,5],您将准确地看到结果。

误解完全在于您的想法,即如何将向量转换为这样的矩阵(并存储在背景中)。定义图像后,所有内容都应与您期望的一样。

顺便说一句:正如hpaulj所说,您确实可能会遇到保存为[3,X,Y]大小的图像。