2015-06-26 16 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))