1

我在形状为 (1027, 888, 3) 的 ndarray 中导入了一个图像。

我的任务是创建一个方法,该方法返回从图像中选择一个图块的 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:规格是从家庭作业中设定的。我已经花了几个小时查看文档和其他索引示例,但没有找到任何可以满足我要求的东西。所以我很困惑。任何指导将不胜感激:)

谢谢!

4

2 回答 2

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)
于 2014-10-19T17:38:49.220 回答
0

不用担心广播,选择可以作为一个两阶段的过程来完成,这很容易理解(首先,沿轴 0 选择,然后沿轴 1 选择)。如果您愿意检查,您会看到第一个索引将一个轴的大小减小到 32。

image[ii][:,jj] #has shape (32, 32, 3)
于 2014-10-19T16:59:52.040 回答