gpt4 book ai didi

python - Numpy 在另一个数组中查找元素索引

转载 作者:太空狗 更新时间:2023-10-29 22:25:29 25 4
gpt4 key购买 nike

我有一个包含唯一正整数的数组/集合,即

>>> unique = np.unique(np.random.choice(100, 4, replace=False))

以及一个数组,其中包含从之前的数组中采样的多个元素,例如

>>> A = np.random.choice(unique, 100)

我想将数组 A 的值映射到这些值在 unique 中出现的位置。

到目前为止,我找到的最佳解决方案是通过映射数组:

>>> table = np.zeros(unique.max()+1, unique.dtype)
>>> table[unique] = np.arange(unique.size)

上面的代码为数组中的每个元素分配了索引,因此以后可以通过高级索引来映射 A:

>>> table[A]
array([2, 2, 3, 3, 3, 3, 1, 1, 1, 0, 2, 0, 1, 0, 2, 1, 0, 0, 2, 3, 0, 0, 0,
0, 3, 3, 2, 1, 0, 0, 0, 2, 1, 0, 3, 0, 1, 3, 0, 1, 2, 3, 3, 3, 3, 1,
3, 0, 1, 2, 0, 0, 2, 3, 1, 0, 3, 2, 3, 3, 3, 1, 1, 2, 0, 0, 2, 0, 2,
3, 1, 1, 3, 3, 2, 1, 2, 0, 2, 1, 0, 1, 2, 0, 2, 0, 1, 3, 0, 2, 0, 1,
3, 2, 2, 1, 3, 0, 3, 3], dtype=int32)

这已经为我提供了正确的解决方案。但是,如果 unique 中的唯一数字非常稀疏且很大,则此方法意味着创建一个非常大的 table 数组,只是为了存储一些数字以供以后映射。

有没有更好的解决方案?

注意:Aunique 都是示例数组,不是 真正的数组。所以问题不在于如何生成位置索引,而在于如何有效地将 A 的元素映射到 unique 中的索引,伪代码我想在 numpy 中加速的内容如下,

B = np.zeros_like(A)
for i in range(A.size):
B[i] = unique.index(A[i])

(假设 unique 是上述伪代码中的一个列表)。

最佳答案

unique 非常密集时,您问题中描述的表方法是最佳选择,但 unique.searchsorted(A) 应该产生相同的结果,但不会产生相同的结果要求 unique 是密集的。 searchsorted 非常适合整数,如果有人试图用具有精度限制的 float 来做这种事情,请考虑像 this 这样的东西。 .

关于python - Numpy 在另一个数组中查找元素索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37464393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com