如何正确理解Numpy多维数组的shape属性?
Numpy多维数组shape的统一理解方式
首先明确:Numpy数组的shape元组逻辑是完全统一的——从轴0到轴n-1,依次对应数组从最外层到最内层的嵌套层级的元素数量,或者说,每个轴的数值代表「沿着该轴切片时,能得到的子数组的总数」。
对应你的两个例子:
1. 你构造的3D数组array_example
数组的嵌套结构是:
[ # 轴0的3个元素(每个都是2行4列的二维数组) [ [0,1,2,3], [4,5,6,7] ], [ [0,1,2,3], [4,5,6,7] ], [ [0,1,2,3], [4,5,6,7] ] ]
- 轴0(最外层):有3个二维数组,所以长度为3
- 轴1(中间层):每个轴0的元素里有2个一维数组(行),所以长度为2
- 轴2(最内层):每个轴1的元素里有4个数值,所以长度为4
最终shape=(3,2,4),你理解的「轴0是3个矩阵」完全正确,因为沿轴0切片得到的就是3个二维矩阵。
2. 图像数组shape=(768,1024,3)
图像数组的嵌套结构对应像素的排列:
[ # 轴0的768个元素(每一行) [ [R,G,B], [R,G,B], ... ], # 轴1的1024个元素(每一列的像素) [ [R,G,B], [R,G,B], ... ], ... ]
- 轴0:对应图像的行数,共768行,长度为768
- 轴1:对应每行的像素数,共1024个,长度为1024
- 轴2:对应每个像素的通道数(RGB),共3个,长度为3
你提到的「最后一个元素表示3个形状为(768,1024)的数组」,本质是沿轴2切片得到的结果——取image[:,:,0]就是红色通道的二维图像,image[:,:,1]是绿色通道,image[:,:,2]是蓝色通道,这和你数组里沿轴0切片得到矩阵的逻辑完全一致,只是我们根据数据用途关注了不同的轴。
总结统一逻辑
不管数组代表什么业务数据,shape的每个数值都对应:
- 数组嵌套层级从外到内的第i层的元素数量
- 沿第i轴(
axis=i)切片时,能得到的子数组的数量,每个子数组的shape就是原shape去掉第i个数值
内容的提问来源于stack exchange,提问作者Soham Bhaumik
相关产品推荐
相关产品推荐

