通过dynamcaly生成的索引在numpy ndarray中进行索引

时间:2014-10-19 15:04:39

标签: python numpy indexing multidimensional-array matrix-indexing

我在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:规格是根据家庭作业设定的。我已经花了几个小时查看文档和索引的其他示例,但没有找到任何可以做我需要的东西。所以我很困惑。任何指导都会非常感激:)

谢谢!

2 个答案:

答案 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)