2024-09-24 00:26:01 发布
网友
我有两个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
你试过searchsorted吗?
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选项,如下所示-
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]
你试过
searchsorted
吗?可以将^{} 与^{} -
如果您关心维护订单,也可以使用^{} -
对于一般情况,当
A
&;B
是未排序数组时,可以在np.searchsorted
中引入sorter
选项,如下所示-我会把我最喜欢的^{} 也加入到这个组合中来解决一个普通的情况-
样本运行-
只是为了完整性:如果
A
中的值是非负的并且相当小:相关问题 更多 >
编程相关推荐