从2D numpy数组中提取多组行/列



我有一个2D numpy数组,我想从中提取多组行/列。

# img is 2D array
img = np.arange(25).reshape(5,5)
array([[ 0,  1,  2,  3,  4],
[ 5,  6,  7,  8,  9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
我知道提取一组行/列的语法。下面将提取前4行以及第3和第4列,如下所示
img[0:4, 2:4]
array([[ 2,  3],
[ 7,  8],
[12, 13],
[17, 18]])

但是,如果我想提取多组行和/或列,该使用什么语法?我尝试了以下操作,但它导致invalid syntax错误

img[[0,2:4],2] 

我从上面的命令中寻找的输出是

array([[ 2],
[12],
[17]])

我试着搜索这个,但它只导致一组行/列或提取离散行/列的结果,我知道如何做,如使用np.ix。

对于上下文,我实际处理的2D数组的尺寸为~800X1200,并且从这个数组中,我想一次提取多个行和列的范围。比如img[[0:100, 120:210, 400, 500:600], [1:450, 500:550, 600, 700:950]]

如果是这样,您可以使用numpy.r_从切片生成索引:

img[np.r_[0,2:4][:,None],2] 

输出:

array([[ 2],
[12],
[17]])

中间体:

np.r_[0,2:4]
# array([0, 2, 3])
np.r_[0,2:4][:,None]  # variant: np.c_[np.r_[0,2:4]]
# array([[0],
#        [2],
#        [3]])

您可以使用numpy.r_创建您的片:

np.r_[0:2, 4]
# array([0,1,4])

那么您可以得到具体的行和列如下:

rows = np.r_[0:2, 4]
cols = np.r_[0, 2:4]
img[rows][:, cols]
# array([[ 0,  2,  3],
#       [ 5,  7,  8],
#       [20, 22, 23]])

最新更新