B 在 A 中的值的位置索引

2023-11-29

我这里有一个有点棘手的问题......

给定两个数组 A 和 B

A = np.array([8, 5, 3, 7])
B = np.array([5, 5, 7, 8, 3, 3, 3])

我想将 B 中的值替换为该值的索引在 A 中。在这个示例中,它看起来像:

[1, 1, 3, 0, 2, 2, 2]

对于我正在解决的问题,A 和 B 包含相同的值集,并且 A 中的所有条目都是唯一的。

解决这个问题的简单方法是使用如下内容:

for idx in range(len(A)):
    ind = np.where(B == A[idx])[0]
    B_new[ind] = A[idx]

但我正在使用的 B 数组包含近一百万个元素,并且使用 for 循环变得非常慢。一定有一种方法可以对其进行矢量化,但我无法弄清楚。我最接近的是做类似的事情

np.intersect1d(A, B, return_indices=True)

但这只给了我firstA 的每个元素在 B 中出现。有什么建议吗?


@mozway 的解决方案适用于小数组,但不适用于大数组,因为它运行在O(n**2)时间(即二次时间,参见时间复杂度了解更多信息)。对于运行在以下环境中的大数组,这是一个更好的解决方案O(n log n)时间(即准线性)基于快速二分查找:

unique_values, index = np.unique(A, return_index=True)
result = index[np.searchsorted(unique_values, B)]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

B 在 A 中的值的位置索引 的相关文章

随机推荐