Python 使用dynamcaly生成的索引在numpy ndarray中建立索引

Python 使用dynamcaly生成的索引在numpy ndarray中建立索引,python,numpy,indexing,multidimensional-array,matrix-indexing,Python,Numpy,Indexing,Multidimensional Array,Matrix Indexing,我有一个图像导入到一个数组中,带有一个形状(1027888,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

我有一个图像导入到一个数组中,带有一个形状(1027888,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_坐标方法生成返回的数组,以模拟与切片示例相同的结果呢?有可能吗

注:规格是根据家庭作业设定的。我已经花了几个小时查看文档和其他索引示例,但没有找到任何可以满足我要求的内容。所以我被卡住了。任何指导都将不胜感激:)


谢谢

不必担心广播,选择可以分为两个阶段进行,这非常容易理解(首先,沿轴0选择,然后沿轴1选择)。如果您想检查,您可以看到第一次索引将一个轴的大小减少到32

image[ii][:,jj] #has shape (32, 32, 3)
你在找那辆车<代码>图像[1:32,2:32]可以表示为
图像[slice(1,32),slice(2,32)]


你确定你需要“一维”数组吗?一般来说,如果您希望索引操作的输出是2d,那么您的索引器也应该可以广播到2d,否则您将需要进行一些手动重塑(是相应的文档部分)。感谢文档参考。这是任务的规范:“瓷砖可以在空间上按行和列排列,类似于像素。因此,我们可以询问第i行和第j列跨度处的平铺像素是多少。在下面,您必须完成函数tile_coordinates的实现,它给出了这个问题的答案。函数应该返回两个一维数组,第一个提供给定磁贴的行坐标,第二个提供列坐标。“据我所知,它需要是一维的。这很有效,尽管返回的结果不是数组,但我将使用此解决方案。谢谢大家!
def tile_coordinates(i, j, tile_size):
    return slice(i, i + tile_size), slice(j, j + tile_size)