高维数组理解

[B,C,D,H,W]为例,可以当作形状维度和数据维度来理解,一般来说,B,H,W都是当作形状,常见的处理主要围绕中间两个进行,初步来看,可以视为BH,W的图片,然后图片的每个像素的特征为长度为C*D的向量组成,如果将这个向量划分为D份的话,每份的长度为C,因为每个像素都有D份,所以可以将图片拆分为D张,每张图片的每个像素特征长度为C。现在就成了B批数据,每批D张图片,图片的通道数为C,此时数据存储在通道数C中,也就是每个数据就是长度为C的向量,维度C成了数据维度,其他都是形状维度。如果将之前的划分改为C份长度为D的向量,同理,就成了B批数据,每批C张图片,图片的通道数为D注意,这里和原来的通道的含义相差甚远所有这些操作其实都是源自于数据存储是连续的缘故,这些数据存储在连续的内存空间中,相当于一个超长的向量,形状维度就是将向量进行迭代分段。这里就是先将整个数据划分为B批,然后每批又划分为H份,每份又继续划分为W份,迭代划分三次后得到的数据长度就是C*D,把B,H,W当作形状的话,就是B张通道数为C*DH x W图片。

写这个的原因还是为了理解对高维数组操作,比如对形状为[B,C,D,H,W]的数据data进行求和data.sum(1),在1维进行求和,此时1维就是我所说的数据维,0维的长度为B还是挺好理解的,就当作B批就好了,再将2,3,4维当作形状维,那么对于给定的形状[b,:,d,h,w],数据长度就是C,形象一点的理解就是2,3,4维组成DH x W图片,图片的通道数为C,先不考虑B,则sum就是对图片的通道数进行求和,这样‘物理意义’就比较明确了。

现在考虑在2维度上进行求和,即data.sum(2),这个意义暂时没想到。。。。