我在ndarray中导入的图像有一个形状(1027,888,3)。
我的任务是创建一个方法,返回2个一维索引数组,从图像中选择一个图块。
ii, jj = tile_cordinates(i,j, tile_size)
imshow(image[ii,jj])
我想模拟与使用此代码相同的结果:
imshow(image[1:32, 2:32])
我试着这样做:
def tile_coordinates(i, j, tile_size):
return range(i, i + tile_size), range(j, j + tile_size)
ii, jj = tile_coordinates(1,2,32)
imshow(image[ii,jj])
但是图像不对。实际上,使用
时,使用两个数组索引图像的结果返回表单是(32,3)image[1:32, 2:32].shape
返回(31,30,3)
那么如何从tile_coordinates方法形成返回的数组来模拟与切片示例相同的结果?它甚至可能吗?
PS:规格是根据家庭作业设定的。我已经花了几个小时查看文档和索引的其他示例,但没有找到任何可以做我需要的东西。所以我很困惑。任何指导都会非常感激:)
谢谢!
答案 0 :(得分:1)
您正在寻找slice
内置版。 image[1:32, 2:32]
可以表示为image[slice(1,32), slice(2,32)]
def tile_coordinates(i, j, tile_size):
return slice(i, i + tile_size), slice(j, j + tile_size)
答案 1 :(得分:0)
不用担心广播,选择可以作为两阶段过程完成,这很容易理解(首先,沿轴0选择,然后沿轴1选择)。如果您需要检查,可以看到第一个索引将一个轴的大小减小到32。
image[ii][:,jj] #has shape (32, 32, 3)