Numpy ndarray切片跳行操作解析:img[::2,::2]的作用与原理
理解numpy数组切片
img[::2, ::2]的操作逻辑 嘿,这问题问得实在!咱们一步步拆解这个numpy切片操作到底干了啥:
首先得回忆下numpy的切片语法:[start:stop:step],当你只写::2的时候,意思是从数组的第一个元素开始,到最后一个元素结束,每隔2个元素取一个。
回到你的例子,原数组img的形状是(468, 832, 3),对应图像的「高度(行数)、宽度(列数)、颜色通道数」:
- 第一个维度(468):代表图像的行,
::2就是每隔一行取一行——取第0行、第2行、第4行……一直到最后一行。468除以2正好是234,所以这个维度的长度变成了234。 - 第二个维度(832):代表图像的列,同样用
::2就是每隔一列取一列——取第0列、第2列、第4列……直到最后一列。832除以2等于416,所以这个维度的长度变成416。 - 第三个维度(3):你没写切片规则,numpy就会默认保留所有元素,所以颜色通道数还是3。
说白了,这个操作就是对图像做了2倍降采样——把图像的长和宽都压缩到原来的1/2,整体分辨率变成原来的1/4(因为面积是长×宽),同时保留所有颜色信息。
举个更直观的小例子:如果原数组是(4, 4, 3),执行img[::2, ::2]后,得到的数组形状就是(2, 2, 3),相当于从4×4的像素网格里,只保留了(0,0)、(0,2)、(2,0)、(2,2)这些间隔位置的像素。
内容的提问来源于stack exchange,提问作者Vaishnav MK
相关产品推荐
相关产品推荐

