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

新手上路,请多包涵

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

 >>> xs = [1, 2, 3]
>>> xs.index(2)
1

NumPy 数组有类似的东西吗?

原文由 Nope 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 392
2 个回答

是的,给定一个数组 array 和一个值 item 进行搜索,您可以使用 np.where 作为:

 itemindex = numpy.where(array == item)

结果是一个元组,首先是所有行索引,然后是所有列索引。

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

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

将等于您的项目,因此将是:

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

原文由 Alex 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

原文由 Vebjorn Ljosa 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题