我有一个返回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做到这一点?
答案 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))