2015-06-26 18 views
1

我有一个返回整数标签的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做到这一点?

回答

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

谢谢你,我不知道np.in1d,它究竟是干什么的Ineed! – Darina

1

不漂亮,但它的伎俩... numpy.nonzero(numpy.sum([labels_array == l for l in labels[0]], axis=0))