如何在比较10.5
和10
?
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]
答案 0 :(得分:2)
您可以将np.searchsorted
与left
和right
一起使用,并且只保留那些不为两者返回相同索引的人:
>>> 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]