【发布时间】:2018-01-31 13:11:42
【问题描述】:
给定一个二维数组和两对索引,分别定义一个子矩阵的左上角和右下角:
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 中同时切片多个维度的东西?
【问题讨论】:
标签: python numpy numpy-slicing