【发布时间】:2019-10-09 04:19:23
【问题描述】:
假设我有一个矩阵:
>> a = np.arange(25).reshape(5, 5)`
>> a
[[ 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]]
以及定义我要提取的矩阵元素范围的两个索引向量:
>> indices1 = np.array([0, 1, 1, 0, 0])
>> indices2 = np.array([2, 3, 3, 2, 2])
如您所见,每个对应索引之间的差值等于 2。
我想做这样的事情提取矩阵的一部分:
>> submatrix = a[indices1:indices2, :]
因此结果将是 2x5 矩阵:
>> submatrix
[[ 0 6 7 3 4],
[ 5 11 12 8 9]]
据我所知,numpy 允许提供索引作为边界,但不允许提供数组,只能提供整数,例如a[0:2]。
注意我要减去的不是子矩阵:
您是否知道索引 numpy 矩阵的其他方法,以便可以提供定义跨度的数组?目前我设法只使用 for 循环来做到这一点。
【问题讨论】:
-
使用恒定长度切片,您可以通过针对 [[0],[1]] 数组广播起始数组来构造索引数组。
-
indices1和indices2之间的差异是否始终是一个常数?喜欢这里是2? -
SO上有很多非常相似的Q。例如,这是几天前的 2D 切片变体 stackoverflow.com/q/56207710/7207392
-
@Divakar 他们是,但我想如果有不需要这种约束并返回所有元素的解决方案会更好(但当然不是作为矩阵)
-
@PaulPanzer 我尽力了,但很难找到。我永远找不到你发布的那个,因为它使用不同的词来陈述问题并且缺少像
indexing这样的标签。
标签: python numpy matrix indexing matrix-indexing