numpy 在不同长度的数组中查找匹配元素

slwdgvem  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(108)

我有两个不同长度的数组。对于array_1中的每个元素,我想找到array_2中匹配元素的位置。这包括array_1中的重复项。
举例来说:

array_1 = np.array([555, 641, 1000, 641, 4, 641])
array_2 = np.array([4, 555, 641, 1000])

字符串
期望的输出将是:

out = [1,2,3,2,0,2]


对于array_1中的每个元素,在array_2中都有一个匹配的元素。array_2是唯一的且已排序。实际上,每个数组有大约一百万个术语。
下面的解决方案可以工作,但对于我需要的东西来说太慢了:

out = [np.where(array_2 == x) for x in array_1]

y53ybaqx

y53ybaqx1#

假设所有唯一项都存在于两个数组中。
如果array_2是排序的,那么它甚至不需要使用它,numpy.unique就足够了。

out = np.unique(array_1, return_inverse=True)[1]

字符串
输出:array([1, 2, 3, 2, 0, 2])
如果array_2没有排序,那么需要对numpy.argsort进行一些后处理:

# let's take a non sorted example
array_2 = np.array([555, 641, 4, 1000])

uniq, idx = np.unique(array_1, return_inverse=True)

out = np.argsort(array_2)[idx]


输出:array([0, 1, 3, 1, 2, 1])

xriantvc

xriantvc2#

使用方式

np.nonzero(np.equal.outer(array_1, array_2))[1]

字符串
尽可能进行矢量化。

相关问题