是否有一个NumPy函数可以返回数组中某个元素的第一个索引?
是否有一个NumPy函数可以返回数组中某个元素的第一个索引?
我知道Python列表有一种方法可以返回某个东西的第一个索引:
>>> xs = [1, 2, 3] >>> xs.index(2) 1
那么NumPy数组有类似的方法吗?
admin 更改状态以发布 2023年5月23日
如果你需要查询只有一个值的第一次出现的索引,你可以使用nonzero
(或者where
,在这种情况下是相同的):
>>> t = array([1, 1, 1, 2, 2, 3, 8, 3, 8, 8]) >>> nonzero(t == 8) (array([6, 8, 9]),) >>> nonzero(t == 8)[0][0] 6
如果你需要查询多个值中的第一个索引,你可以重复使用以上方法,但是有一个可能更快的技巧。以下代码可以找到每个子序列的第一个元素的索引:
>>> nonzero(r_[1, diff(t)[:-1]]) (array([0, 3, 5, 6, 7, 8]),)
请注意,它可以找到所有子序列中3的开头和8的开头:
[1, 1, 1, 2, 2, 3, 8, 3, 8, 8]
因此,这与查找每个值的第一次出现略有不同。在你的程序中,你可以使用已排序的t
版本来得到你想要的结果:
>>> st = sorted(t) >>> nonzero(r_[1, diff(st)[:-1]]) (array([0, 3, 5, 7]),)
是的,给定一个数组array
,和一个要搜索的值item
,你可以使用np.where
,如下所示:
itemindex = numpy.where(array == item)
结果是一个元组,首先是所有行的索引,然后是所有列的索引。
例如,如果一个数组是二维的,并且它包含了你的项目在两个位置,那么
array[itemindex[0][0]][itemindex[1][0]]
将等于你的项目,如下所示:
array[itemindex[0][1]][itemindex[1][1]]