2024-04-25 08:57:32 发布
网友
我知道有一种方法可以让Python列表返回某物的第一个索引:
>>> l = [1, 2, 3] >>> l.index(2) 1
对于NumPy数组有类似的东西吗?
是的,这里给出了一个NumPy数组array和一个值item来搜索的答案:
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,在本例中等于相同的值):
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的排序版本来获得所需的内容:
t
>>> st = sorted(t) >>> nonzero(r_[1, diff(st)[:-1]]) (array([0, 3, 5, 7]),)
是的,这里给出了一个NumPy数组
array
和一个值item
来搜索的答案:结果是一个元组,首先是所有行索引,然后是所有列索引。
例如,如果数组是二维的,并且它在两个位置包含您的项,则
与你的物品相等
numpy.where
您还可以将NumPy数组转换为在air中列出并获取其索引。例如
它将打印1。
如果您只需要一个值的第一次出现的索引,则可以使用
nonzero
(或where
,在本例中等于相同的值):如果需要每个多个值的第一个索引,显然可以重复执行上述操作,但有一个技巧可能更快。以下是每个子序列的第一个元素的索引:
注意,它找到3s的两个子序列和8s的两个子序列的开头:
[1,1,1,2,2,3,8,3,8,8]
所以它与发现每个值的第一个出现略有不同。在您的程序中,您可以使用
t
的排序版本来获得所需的内容:相关问题 更多 >
编程相关推荐