我有这个矩阵:
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中的行。
答案 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]))