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

2024-04-25 08:57:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

对于NumPy数组有类似的东西吗?


Tags: 方法numpy列表index数组
3条回答

是的,这里给出了一个NumPy数组array和一个值item来搜索的答案:

itemindex = numpy.where(array==item)

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

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

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

与你的物品相等

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

numpy.where

您还可以将NumPy数组转换为在air中列出并获取其索引。例如

l = [1,2,3,4,5] # Python list
a = numpy.array(l) # NumPy array
i = a.tolist().index(2) # i will return index of 2
print i

它将打印1。

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

所以它与发现每个值的第一个出现略有不同。在您的程序中,您可以使用t的排序版本来获得所需的内容:

>>> st = sorted(t)
>>> nonzero(r_[1, diff(st)[:-1]])
(array([0, 3, 5, 7]),)

相关问题 更多 >

    热门问题