给定一个二维数组和两对索引,分别定义子矩阵的左上角和右下角:
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中的第一个索引,第二个切片到第二个索引。你知道吗
我想用这个函数,应该工作的二维和三维。 在这里,这样的公式更一般,因为不需要计算尺寸和调整切片:
a[i:j] # 1D
a[i:j, k:l] # 2D
a[i:j, k:l, n:m] # 3D
a[tuple_1:tuple_2] # Wish
如果arrray和两个索引元组 匹配维度的。你知道吗
在python/numpy中是否有类似于同时切片多个维度的东西?你知道吗
如果您有这两个列表,我们可以按如下方式构造元组:
在这里,我们同时迭代两个iterable
ij_ul
和ij_lr
,然后构造slice(..)
对象(如果你写i:j
,你实际上是在幕后构造这样的对象)。你知道吗所以我们在这里要做的是构造一个切片元组,我们可以把它传递给
a
,用指定的切片构造一个视图。你知道吗例如:
相关问题 更多 >
编程相关推荐