从python中的矩阵中提取子元素

时间:2018-04-13 12:29:23

标签: python arrays python-3.x numpy matrix

我有这个矩阵:

0   0   0   138
0   8   0   0
0   1   0   0
131 0   0   138
0   0   138 0
0   0   0   0
0   115 0   8

和这个索引向量:

idx = [2,4,5]

我需要从138的所有条目的矩阵中获取row-index和col-index,但是,仅针对idx中的行。

3 个答案:

答案 0 :(得分:0)

如果您存储矩阵如下:

matrix = [ [0, 0, 0, 138], [0, 8, 0, 0], ... ]

然后你的工作很简单:

result = []
for i in idx:
    row = matrix[i]
    for j in range(len(row)):
        if row[j] == 138:
            result.append((i, j))
return result

答案 1 :(得分:0)

由于您使用的是numpy,因此您应该尝试以矢量化方式执行此操作:

import numpy as np

A = np.array([[0, 0, 0, 138],
              [0, 8, 0, 0],
              [0, 1, 0, 0],
              [131, 0, 0, 138],
              [0, 0, 138, 0],
              [0, 0, 0, 0],
              [0, 115, 0, 8]])

idx = np.array([2, 4, 5])

match = np.argwhere(A == 138)
res = match[np.in1d(match[:, 0], idx)]

# array([[4, 2]], dtype=int64)

答案 2 :(得分:0)

直接在A上使用行索引,然后搜索138

>>> import numpy as np
>>> 
>>> A = np.array([[0, 0, 0, 138],
...               [0, 8, 0, 0],
...               [0, 1, 0, 0],
...               [131, 0, 0, 138],
...               [0, 0, 138, 0],
...               [0, 0, 0, 0],
...               [0, 115, 0, 8]])
>>> 
>>> idx = np.array([2, 4, 5])
>>> 
>>> y, x = np.where(A[idx]==138)
>>> y = idx[y]
>>> y, x
(array([4]), array([2]))