为什么numpy在从两个不同的列表中比较整数和浮点值时返回true索引

时间:2017-08-20 07:44:35

标签: python arrays numpy match

如何在比较10.510

时避免返回真实索引
A = np.array([1,2,3,4,5,6,7,8,9,10.5])

B = np.array([1,7,10])

i = np.searchsorted(A,B)

print i   # [0 6 9]

我想获得完全匹配的地点:[0 6]

2 个答案:

答案 0 :(得分:2)

您可以将np.searchsortedleftright一起使用,并且只保留那些不为两者返回相同索引的人:

>>> import numpy as np
>>> A = np.array([1,2,3,4,5,6,7,8,9,10.5])
>>> B = np.array([1,7,10])

>>> i = np.searchsorted(A, B, 'left')
>>> j = np.searchsorted(A, B, 'right')
>>> i[i!=j]
array([0, 6], dtype=int64)

这是有效的,因为searchsorted如果要保持另一个数组的排序,则返回需要插入元素的索引。因此,当该值存在于另一个数组中时,它将返回匹配前的索引(left)和匹配后的索引(right)。因此,如果索引不同,则完全匹配,如果索引相同则没有完全匹配

答案 1 :(得分:0)

首先,您可以帮助searchsorted,因为A已经过排序,以获得更好的复杂性:

A = np.array([1,2,3,4,5,6,7,8,9,10.5])
B = np.array([1,7,10])    
i = np.searchsorted(A,B,sorter=range(len(A)))

然后in1d可以找到确切的对应关系:

j = i[np.in1d(A[i],B,True)]
# [0,6]