如果您对为什么约定图像数组的形状为 (N, M, 3) 而不是 (3, N, M) 感到困惑,让我们看看索引在这两种情况下的工作原理。
假设我们有一个名为image_array 的图像,它表示一个宽度和高度为100 像素的随机颜色,让我们尝试对其进行索引以访问索引(50, 50) 处的像素值。
渠道优先
import numpy as np
image = np.random.random((3, 100, 100)) #image.shape == (3, 100, 100)
pixel = image[:, 50, 50] #pixel.shape == (3,)
最后一个频道
import numpy as np
image = np.random.random((100, 100, 3)) #image.shape == (100, 100, 3)
pixel = image[50, 50] #pixel.shape == (3,)
将通道作为数组的最后一维,意味着单个像素信息更易于索引查找。在第一种情况下,我们需要指定每次都需要整个第一个维度。这些本质上是相同的,但是将通道放在最后可以让我们在如何索引数组方面不那么冗长。