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

如何使用numpy数组有效获取由特定值选择的索引列表?

丁毅庵
2023-03-14
问题内容

我有一个像这样的numpy数组:

import numpy as np
arr = np.array([9, 6, 3, 8, 2, 3, 3, 4, 4, 9, 5, 6, 6, 6, 6, 7, 8, 9])

我想按组获取找到的值的索引列表

index_list_2 = [4 ]         # index list of the element with the value 2
index_list_3 = [2, 5, 6 ]
index_list_4 = [7, 8 ]
index_list_9 = [0, 9, 17]

# [...]

我想到的第一种方法(不是很pythonic):

i = 0
for x in arr:
    if x == 2:
        index_list_2 += [i]
    if x == 3:
        index_list_3 += [i]
    if x == 4:
        index_list_4 += [i]
    if x == 9:
        index_list_9 += [i]
    i += 1

哪种方法最有效的方法是使用numpy数组?


问题答案:

这应该不会太慢。该数组仅迭代一次。结果(ind)是字典值->索引列表。

import numpy as np
arr = np.array([2, 3, 3, 4, 4, 9, 5, 6, 6, 6, 6, 7, 8, 9])

ind = dict()
for i, val in enumerate(arr):
  ind.setdefault(val, []).append(i)


 类似资料:
  • 我很难选择一个NumPy矩阵的每行的特定列。 假设我有以下矩阵,我称之为: 我还有一个每行列索引的,我称之为: 我需要获得值: 我还可以生成一个与形状相同的矩阵,而不是带有索引的,其中每一列都是一个/范围为0-1的值,指示这是否是必需的列。 我知道这可以通过迭代数组并选择我需要的列值来完成。然而,这将经常在大的数据数组上执行,这就是为什么它必须尽可能快地运行。 因此,我想知道是否有更好的解决办法?

  • 问题内容: 现在说我有一个numpy数组,定义为 现在,我想要一个包含缺失值的所有索引的列表,在这种情况下。 有什么办法可以做到吗? 问题答案: np.isnan与np.argwhere结合 输出:

  • 问题内容: 我有一个NumPy数组,我想检索除某个索引以外的所有元素。例如,考虑以下数组 如果我指定索引3,则结果应为 问题答案: 像调整大小一样,从NumPy数组中删除元素是一个缓慢的操作(特别是对于大型数组,因为它需要分配空间并将所有数据从原始数组复制到新数组)。如果可能,应避免使用。 通常,您可以通过使用蒙版数组来避免这种情况。例如,考虑数组: 我们可以在索引3处屏蔽它的值,并且可以执行 忽

  • 问题内容: 我有一个数组,只是想在索引1处获取元素。 如何在JavaScript中数组的第一个索引处获取值? 问题答案: 只需使用

  • 问题内容: 我有大量的数据,需要比较该数组中所有样本的距离与该数组中所有其他元素的距离。以下是我的数据集的一个非常简单的示例。 有没有一种方法可以为非示例索引的索引建立一个numpy数组?在上面的示例中,我创建了一个名为other_indexes的列表。由于各种原因,我宁愿不必这样做(大型数据集,线程,正在运行的系统上的内存非常低等,等等)。有没有办法做类似的事情.. 我读到numpy面具可以做到

  • 问题内容: 我一直在发疯,试图找出我在这里做错了什么愚蠢的事情。 我正在使用NumPy,并且我想从中选择特定的行索引和特定的列索引。这是我的问题的要点: 为什么会这样呢?我当然应该能够选择第一行,第二行和第四行以及第一列和第三列?我期望的结果是: 问题答案: 花式索引要求您提供每个维度的所有索引。您为第一个提供3个索引,为第二个仅提供2个索引,因此会出现错误。您想做这样的事情: 当然写这很痛苦,所

  • 问题内容: 我正在尝试获取numpy数组中所有重复元素的索引,但是我目前发现的解决方案对于大型(> 20000个元素)输入数组(大约需要9秒钟的时间),实际上效率很低。这个想法很简单: 是一个时间戳()的numpy数组,我们要从中提取重复时间戳的索引 是一个numpy数组,其中包含在中重复的所有时间戳 是一个django QuerySet(可以轻松转换为列表),其中包含一些Record对象。我们要

  • 问题内容: 说有这样的表: 字段名称很容易解释。我想选择同时具有1和3 的,因此在此示例中仅。我想到了类似的 清单,之后我想列出该组中存在的。我怎么做? 问题答案: 如果没有任何唯一约束,请尝试: 如果仅尝试检测两个值,请使用此子句: 如果post_id和tag_id都具有唯一约束,那么这也应该起作用: