如何在处理其中一个子矩阵时保留矩阵的索引?

时间:2018-04-04 20:09:33

标签: numpy

我正在尝试实现迭代删除矩阵的某些行和列的算法,并继续处理剩余的子矩阵。但是,我想知道原始矩阵中的值的索引而不是剩余的子矩阵。

例如,假设使用

构建矩阵x
x = np.arange(9).reshape(3, 3)

现在,我想在下面定义的子矩阵中找到等于8的元素的索引:

np.where(x[1:, 1:] == 8)

默认情况下,numpy返回(array[1], array[1]),因为它在切片的子矩阵中找到元素。我喜欢返回的是(array[2], array[2]),它是原始矩阵中的索引8。

这个问题的有效解决方案是什么?

P.S。

  • 子矩阵可以任意构建。例如,我可能需要保留行0和1,但列0和2。
  • 可以在下一次迭代中切割每个子矩阵以制作更小的子矩阵。我仍然希望能够访问原始矩阵中的索引。换句话说,我正在寻找一种适用于子矩阵子矩阵的解决方案。

1 个答案:

答案 0 :(得分:0)

我最近了解了indexing with arrays,其中可以使用另一个numpy数组选择矩阵的子矩阵。我认为我能解决的问题是将子矩阵的索引映射到索引数组的元素。

例如,在上面的示例中,子矩阵可以像这样定义:

row_idx = np.array([1, 2])
col_idx = np.array([1, 2])

np.where(x[row_idx[:, None], col_idx] == 8)

这仍将返回相同的(array[1], array[1])输出,但我可以使用这些索引查找row_idxcol_idx的元素,以便在原始矩阵中找到相应的索引,即row_idx[1]col_idx[1]