获取numpy中最不常出现的值的索引

时间:2015-06-26 18:03:55

标签: python numpy

我有一个返回numpy整数标签数组的函数,例如:

labels_array = numpy.array([0, 0, 1, 1, 0, 1, 2, 3, 0, 2, 3,])

标签始终从0开始连续运行。

我的目标是找到labels_array中最不经常出现的标签索引。如果labels_array中有多个满足该条件的标签,那么我想得到所有相应的索引。对于上面的例子,我会得到

result= [6, 7, 9, 10]

而不仅仅是[6]

目前我计算每个标签的出现次数,然后得到出现次数最少的标记。

occurrencePerLabel = numpy.bincount(labels_array)
labels = numpy.where(occurrencePerLabel == occurrencePerLabel.min())

现在我有了

labels = (array([2, 3]),)

告诉我2和3是labels_array

中发生次数最少的标签

接下来,我需要获得labels_array为2或3的索引,这正是我正在寻找的结果。基本上我在寻找像

这样的东西
labels_array.index(labels_array == labels)

我如何用numpy做到这一点?

2 个答案:

答案 0 :(得分:3)

>>> np.where(np.in1d(labels_array, [2, 3]))[0]
array([ 6,  7,  9, 10])

答案 1 :(得分:1)

不是很漂亮,但它可以解决问题... numpy.nonzero(numpy.sum([labels_array == l for l in labels[0]], axis=0))