首页 > 解决方案 > 按数组范围进行 Numpy 索引

问题描述

myarr假设我有一个这样的数组myarr.shape = (2,64,64,2)。现在如果我定义myarr2 = myarr[[0,1,0,0,1],...],那么以下是正确的

myarr2.shape #(5,64,64,2)
myarr2[0,...] == myarr[0,...] # = True
myarr2[1,...] == myarr[1,...] # = True
myarr2[2,...] == myarr[0,...] # = True
...

这可以概括为切片是数组吗?也就是说,有没有办法让下面的假设代码工作?

myarr2 = myarr[...,[20,30,40]:[30,40,50],[15,25,35]:[25,35,45],..]
myarr2[0,] == myarr[...,20:30,15:25,...] # = True
myarr2[1,] == myarr[...,30:40,25:35,...] # = True
myarr2[2,] == myarr[...,40:50,35:45,...] # = True

标签: pythonnumpy

解决方案


您可以将子数组的坐标提供给从myarray. 我不知道您存储子数组的索引,所以我将它们放入嵌套列表中idx_list

idx_list = [[[20,30,40],[30,40,50]],[[15,25,35]:[25,35,45]]]  # assuming 2D cutouts
idx_array = np.array([k for i in idx_list for j in i for k in j]) # unpack
idx_array = idx_array .reshape(-1,2).T  # reshape
myarray2 = np.array([myarray[a:b,c:d] for a,b,c,d in i2])  # cut and combine

推荐阅读