【发布时间】:2018-02-08 13:15:06
【问题描述】:
我有一个这样的 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]
# [...]
我想到的第一种方法(这不是很 Python):
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 数组实现这一目标的最有效方法是什么?
【问题讨论】:
-
虽然这不是 numpy,但结合
itertools.groupby和enumerate会起作用。 -
arr总是排序吗? -
@hpaulj 不,你可以看到数组中间还有一个 9。我添加了更多数字以避免误解
-
这个问题本质上没有像数组一样的东西 - 它实际上是关于收集列表中的位置。您的结果是不同长度的列表,这是一个很好的指标,表明这没有快速的 numpy 解决方案。
标签: python python-3.x numpy