是否有一个NumPy函数可以返回数组中某个元素的第一个索引?

12 浏览
0 Comments

是否有一个NumPy函数可以返回数组中某个元素的第一个索引?

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

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

那么NumPy数组有类似的方法吗?

admin 更改状态以发布 2023年5月23日
0
0 Comments

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

0
0 Comments

是的,给定一个数组array,和一个要搜索的值item,你可以使用np.where,如下所示:

itemindex = numpy.where(array == item)

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

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

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

将等于你的项目,如下所示:

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

0