当前位置: 首页 > 面试题库 >

一次获取NumPy数组中几个元素的索引

羿博延
2023-03-14
问题内容

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

例如

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

我想找到ain中每个元素的索引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给出了这里,使用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]


 类似资料:
  • 问题内容: 我有一个二维NumPy数组。我知道如何获取轴上的最大值: 如何获得最大元素的索引?我想代替输出。 问题答案:

  • 问题内容: 在Python中,我们可以使用来获取数组中值的索引。 但是,当我尝试执行NumPy数组时: 我得到: AttributeError:“ numpy.ndarray”对象没有属性“ index” 我如何在NumPy数组上执行此操作? 问题答案: 使用来获得,其中一个给定的条件是指数。 例子: 对于称为的2D : 对于一维数组: 请注意,这也适用于像条件,,等等… 您也可以使用方法创建的子

  • 我有一个2D麻木阵列: 如何获取大于的元素的索引? 现在,我正在做以获取每个最大值的索引,结果是:。我如何实现上述操作?

  • 问题内容: 我有一个int数组,想要获取最小10个(任何n个)元素的索引。我怎样才能做到这一点? 问题答案: 创建一个包含数字和索引的对象,然后创建这些对象的数组,然后执行Array.Sort(arrayset [],比较器)java docs 。然后,您可以从已排序的数组中挑选出前x个项目。 编辑:像这样… [我曾经用它来根据’距离’进行排序

  • 问题内容: 我有一个数组: 我想获得此数组的第一个元素。预期结果: 字符串 一个要求: 它不能通过引用传递来完成 ,所以不是一个好的解决方案。 我怎样才能做到这一点? 问题答案: 原始答案,但代价昂贵(O(n)): 在O(1)中: 其他用例等 如果修改(就重置数组指针而言)不是问题,则可以使用: 如果需要数组“副本”,则从理论上讲应该更有效: 使用PHP 5.4+(但如果为空,则可能导致索引错误)

  • 问题内容: 我有两个一维数组x和y,一个比另一个小。我试图找到x中y的每个元素的索引。 我发现有两种简单的方法可以做到这一点,第一种很慢,第二种需要占用大量内存。 记忆猪 是否有更快的方法或更少的内存密集型方法?理想情况下,搜索将利用以下事实:我们不是在列表中搜索一件事,而是在搜索许多东西,因此稍微适合并行化。如果您不假设y的每个元素实际上都在x中,则可获得加分。 问题答案: 正如Joe King