(2,3) 表示两个一维数组,每个一维数组长度为3
(2,3,4) 表示两个二维数组,每个二维数组有3个一维数组,每个一维数组长度为4
(2,3,4,5) 表示两个三维数组,每个三维数组有3个二维数组,每个二维数组有4个一维数组,一维数组长度为5
numpy多维数组shape的理解_二仪式的博客-CSDN博客
通过重排一维向量或转换嵌套的Python列表来创建3D数组时,索引的含义为(z,y,x)。
第一个索引是平面的编号,然后才是在该平面上的移动:
这种索引顺序很方便,例如用于保留一堆灰度图像:这a[i]是引用第i个图像的快捷方式。
但是此索引顺序不是通用的。处理RGB图像时,通常使用(y,x,z)顺序:前两个是像素坐标,最后一个是颜色坐标(Matplotlib中是RGB ,OpenCV中是BGR ):
显然,NumPy函数像hstack、vstack或dstack不知道这些约定。其中硬编码的索引顺序是(y,x,z),RGB图像顺序是:
如果数据的布局不同,则使用concatenate命令堆叠图像,并在axis参数中提供显式索引数会更方便:
如果不方便使用axis,可以将数组转换硬编码为hstack的形式:
这种转换没有实际的复制发生。它只是混合索引的顺序。
混合索引顺序的另一个操作是数组转置。检查它可能会让我们对三维数组更加熟悉。
根据我们决定的axis顺序,转置数组所有平面的实际命令将有所不同:对于通用数组,它交换索引1和2,对于RGB图像,它交换0和1:
有趣的是,(和唯一的操作模式)默认的axes参数颠倒了索引顺序,这与上述两个索引顺序约定都不相符。
最后,还有一个函数,可以在处理多维数组时节省很多Python循环,并使代码更简洁,这就是爱因斯坦求和函数