我有一个向量(比如v = (1, 5, 7)
)和一个数组。
a = [ [1, 2, 3],
[4, 5, 6],
[7, 8, 9] ]
在a中相应行中查找向量v中元素索引的最有效方法是什么。例如,这里的输出将是
b = (0, 1, 0)
,因为1
位于第1行的0th
索引,依此类推。
答案 0 :(得分:5)
您可以将v
转换为包含[:,None]
的列向量,然后与a
进行比较以引入broadcasting
,最后使用np.where
来获得最终结果输出为指数 -
np.where(a == v[:,None])[1]
示例运行 -
In [34]: a
Out[34]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
In [35]: v
Out[35]: array([1, 5, 7])
In [36]: np.where(a == v[:,None])[1]
Out[36]: array([0, 1, 0])
如果a
中的一行中有多个元素与v
中的相应元素匹配,则可以使用np.argmax
获取每行中第一个匹配的索引,像这样 -
np.argmax(a == v[:,None],axis=1)
示例运行 -
In [57]: a
Out[57]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 7]])
In [58]: v
Out[58]: array([1, 5, 7])
In [59]: np.argmax(a == v[:,None],axis=1)
Out[59]: array([0, 1, 0])
答案 1 :(得分:1)
>>> a = [ [1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> v = (1, 5, 7)
>>> b = tuple([a[id].index(val) for id, val in enumerate(v)])
>>> b
(0, 1, 0)
答案 2 :(得分:0)