是否有一个 NumPy 函数来返回数组中某物的第一个索引?

我知道 Python 列表有一种方法可以返回某些内容的第一个索引:

>>> l = [1, 2, 3]
>>> l.index(2)
1
NumPy 数组有类似的东西吗?

已邀请:
是的,给定一个数组 ,array和一个item要搜索的值,您可以将其np.where用作:

itemindex = numpy.where(array==item)
结果是一个元组,首先包含所有行索引,然后是所有列索引。

例如,如果一个数组是二维的并且它在两个位置包含您的项目,那么

array[itemindex[0][0]][itemindex[1][0]]
将等于您的项目,因此将是:

array[itemindex[0][1]][itemindex[1][1]]

如果您只需要第一次出现一个 value的索引,您可以使用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]),)

请注意,它找到了 3s 的两个子序列和 8s 的两个子序列的开头:

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]),)

要回复问题请先登录注册