给定一个二维数组和两对索引,分别定义一个子矩阵的左上角和右下角:
a = 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]])
ij_ul = (1, 1) # upper left
ij_lr = (4, 3) # lower right
我可以通过以下方式获取子矩阵:
a[ij_ul[0]:ij_lr[0], ij_ul [1]: ij_lr[1]]
# array([[ 6, 7],
# [11, 12],
# [16, 17]])
但是我想使用像这样更优雅的东西:
a[ij_ul:ij_lr] # Wish
# TypeError: slice indices must be integers or None or have an __index__ method
同时切片所有维度。ij_ul中的第一个索引切片到ij_lr中的第一个索引,第二个到第二个。
我想将它用于应该适用于 2D 和 3D 的功能。这里这样的公式会更通用,因为不需要计算尺寸和调整切片:
a[i:j] # 1D
a[i:j, k:l] # 2D
a[i:j, k:l, n:m] # 3D
a[tuple_1:tuple_2] # Wish
如果数组和两个索引元组具有匹配的维度,则最后一行将始终有效。
是否有类似在 python/numpy 中同时切片多个维度的东西?