为什么numpy在比较两个不同li的整数和浮点值时返回真索引

2024-03-28 20:34:36 发布

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

如何避免在比较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]


Tags: nparrayprintsearchsorted
2条回答

您可以将^{}leftright一起使用,并且只保留那些不同时返回相同索引的对象:

>>> 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)。因此,如果索引不同,则存在完全匹配,如果索引相同,则不存在完全匹配

首先,您可以帮助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] 

相关问题 更多 >