在另一个数组中查找一个数组的匹配索引

2024-09-24 00:26:01 发布

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

我有两个numpy数组,A和B。A conatains唯一值,B是A的子数组。 现在我正在寻找一种方法来获得a中B值的索引

例如:

A = np.array([1,2,3,4,5,6,7,8,9,10])
B = np.array([1,7,10])
# I need a function fun() that:
fun(A,B)
>> 0,6,9

Tags: 方法numpythatnpfunction数组needarray
3条回答

你试过searchsorted吗?

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

A.searchsorted(B)
# array([0, 6, 9])

可以将^{}^{}-

np.nonzero(np.in1d(A,B))[0]

如果您关心维护订单,也可以使用^{}-

np.searchsorted(A,B)

对于一般情况,当A&;B是未排序数组时,可以在np.searchsorted中引入sorter选项,如下所示-

sort_idx = A.argsort()
out = sort_idx[np.searchsorted(A,B,sorter = sort_idx)]

我会把我最喜欢的^{}也加入到这个组合中来解决一个普通的情况-

np.nonzero(B[:,None] == A)[1]

样本运行-

In [125]: A
Out[125]: array([ 7,  5,  1,  6, 10,  9,  8])

In [126]: B
Out[126]: array([ 1, 10,  7])

In [127]: sort_idx = A.argsort()

In [128]: sort_idx[np.searchsorted(A,B,sorter = sort_idx)]
Out[128]: array([2, 4, 0])

In [129]: np.nonzero(B[:,None] == A)[1]
Out[129]: array([2, 4, 0])

只是为了完整性:如果A中的值是非负的并且相当小:

lookup = np.empty((np.max(A) + 1), dtype=int)
lookup[A] = np.arange(len(A))
indices  = lookup[B]

相关问题 更多 >