我想获取一个二维Numpy数组的索引,该数组与一行相匹配。例如,我的数组是这样的:
vals = np.array([[0, 0],
[1, 0],
[2, 0],
[0, 1],
[1, 1],
[2, 1],
[0, 2],
[1, 2],
[2, 2],
[0, 3],
[1, 3],
[2, 3],
[0, 0],
[1, 0],
[2, 0],
[0, 1],
[1, 1],
[2, 1],
[0, 2],
[1, 2],
[2, 2],
[0, 3],
[1, 3],
[2, 3]])
我想得到与行[0,1]相匹配的索引,即索引3和15。当我做像numpy.where(vals == [0 ,1])
这样的事情时,我得到...
(array([ 0, 3, 3, 4, 5, 6, 9, 12, 15, 15, 16, 17, 18, 21]), array([0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0]))
我需要index array([3,15])。
3条答案
按热度按时间ffvjumwh1#
你需要
np.where
函数来获取索引:或者,正如文档所述:
如果只给出条件,则返回
condition.nonzero()
你可以直接在
.all
返回的数组上调用.nonzero()
:要拆解:
然后在该数组上调用
.all
方法(使用axis=1
),得到True
,其中两者都为True:并得到哪些索引是
True
:或
我发现我的解决方案更具可读性,但正如unutbu指出的那样,下面的方法可能更快,并且返回与
(vals == (0, 1)).all(axis=1)
相同的值:rnmwe5a22#
我不知道为什么,但这明显比
np.where((vals == (0, 1)).all(axis=1))
:axzmvihb3#
使用我创建的numpy_indexed包,您可以简单地编写: