gpt4 book ai didi

python - 一次获取 NumPy 数组中多个元素的索引

转载 作者:太空宇宙 更新时间:2023-11-03 21:24:08 24 4
gpt4 key购买 nike

有没有办法一次性获取 NumPy 数组中多个元素的索引?

例如

import numpy as np
a = np.array([1, 2, 4])
b = np.array([1, 2, 3, 10, 4])

我想找到a中每个元素在b中的索引,即:[0,1,4]

我发现我使用的解决方案有点冗长:

import numpy as np

a = np.array([1, 2, 4])
b = np.array([1, 2, 3, 10, 4])

c = np.zeros_like(a)
for i, aa in np.ndenumerate(a):
c[i] = np.where(b == aa)[0]

print('c: {0}'.format(c))

输出:

c: [0 1 4]

最佳答案

您可以使用in1dnonzero (或where):

>>> np.in1d(b, a).nonzero()[0]
array([0, 1, 4])

这对于您的示例数组来说效果很好,但一般来说,返回索引的数组不遵循 a 中值的顺序。这可能会成为一个问题,具体取决于您接下来要执行的操作。

在这种情况下,更好的答案是 @Jaime 给出的 here ,使用searchsorted:

>>> sorter = np.argsort(b)
>>> sorter[np.searchsorted(b, a, sorter=sorter)]
array([0, 1, 4])

这将返回 a 中出现的值的索引。例如:

a = np.array([1, 2, 4])
b = np.array([4, 2, 3, 1])

>>> sorter = np.argsort(b)
>>> sorter[np.searchsorted(b, a, sorter=sorter)]
array([3, 1, 0]) # the other method would return [0, 1, 3]

关于python - 一次获取 NumPy 数组中多个元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53978972/

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