2011-09-11 34 views
2

可以說我有一個數組'foo',有兩列。列0的值爲1到12,表示月份。列1具有相應的測量值。如果我想創造十二月,一月和二月(12,1,2)測量值的面膜我會懷疑,我可以:替代使用'in'與numpy.where()

numpy.where(foo[:,1] in (12, 1, 2), False, True) 

但是它會出現在我的(12,1巧妙」 ,2)'不作爲where()的條件。它也不像[12,1,2]等工作...

有沒有另外一個聰明的方法來做到這一點?有沒有更好的方法可以將所有(12,1,2)測量數據收集到一個數組中?什麼是不平坦的方式?

(重塑陣列是不可能的,因爲對於每個月不規則的測量次數)

回答

4

我認爲「在(12,1,2)」不工作的原因是'in'之前的元素必須是單個元素。

但是對於這個,numpy的功能是in1ddocumentation)做一個nin陣列的'in'。與您的代碼:

np.where(np.in1d(foo[:,0], [12, 1, 2]), False, True) 

完成與評論的答案:在這種情況下使用where是多餘的in1d輸出可用於指數富:

foo[np.in1d(foo[:,0], [12, 1, 2])] 

foo[~np.in1d(foo[:,0], [12, 1, 2])] 

注意:in1d僅適用於numpy 1.4或更高版本。

+0

是啊!我甚至不需要這個np.where()!我可以使用np.in1d()創建我需要的東西() 謝謝! – brews

+0

事實上,np.in1d的輸出可用於索引foo。 – joris