我知道 Python 列表有一种方法可以返回某物的第一个索引:
>>> xs = [1, 2, 3]
>>> xs.index(2)
1
NumPy 数组有类似的东西吗?
原文由 Nope 发布,翻译遵循 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 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
是的,给定一个数组
array
和一个值item
进行搜索,您可以使用np.where
作为:结果是一个元组,首先是所有行索引,然后是所有列索引。
例如,如果一个数组是二维的,并且它在两个位置包含您的项目,那么
将等于您的项目,因此将是: