Numpy花式索引导致不同形状的选择

Numpy花式索引导致不同形状的选择,numpy,Numpy,从以下代码段: >>> palette = np.array( [ [0,0,0], # black ... [255,0,0], # red ... [0,255,0], # green ... [0,0,255], # blue ...

从以下代码段:

>>> palette = np.array( [ [0,0,0],                # black
...                       [255,0,0],              # red
...                       [0,255,0],              # green
...                       [0,0,255],              # blue
...                       [255,255,255] ] )       # white
>>> image = np.array( [ [ 0, 1, 2, 0 ],           # each value corresponds to a color in the palette
...                     [ 0, 3, 4, 0 ]  ] )
>>> brush = palette[image]                            # the (2,4,3) color image
array([[[  0,   0,   0],
        [255,   0,   0],
        [  0, 255,   0],
        [  0,   0,   0]],
       [[  0,   0,   0],
        [  0,   0, 255],
        [255, 255, 255],
        [  0,   0,   0]]])
变量
brush
的形状为(2,4,3)。有人能解释一下为什么将(2,4)形状的过滤器应用于(5,3)形状的数组会产生一个形状(2,4,3)的数组吗?

因为你的掩码(在本例中,数组
图像
)是一个形状
(2,4)
的数组。遮罩拾取的每个元素都是1d数组,包含
3个
元素。因此,
画笔
将具有形状
(2,4,3)

这可能有助于您查看数组的形状
笔刷

引自:

通常,结果数组的形状将是串联 索引数组的形状(或所有索引 阵列被广播到具有任何未使用维度形状的 (未编入索引的)正在编入索引的数组中


调色板[图像[0]]
返回通过堆叠
调色板的行0、1、2和0获得的二维形状数组(4,3)。类似地,
调色板[image[1]]
堆叠
调色板的第0、3、4、0行。
palete[image]
将两个二维数组
palete[image[0]]
palete[image[1]
堆叠在一起,形成一个形状(2,4,3)的三维数组。

它为
image
的每个元素选择一行
palete
<代码>图像
为(2,4),结果的尾随维度为3。