2013-08-03 65 views
2

假設你有一個numpy數組作爲array([[5],[1,2],[5,6,7],[5],[5]])。 是否有一個函數,如np.where,可用於返回所有行索引,其中[5]是行值?例如,在上面的數組中,返回的值應該是[0, 3, 4],表示行號爲[5]np.其中多維numpy陣列的等價物

請注意,陣列中的每一行可以有不同的長度。

謝謝鄉親們,你們都值得最好的答案,但我給了綠色標誌的第一個:)

+0

你確定你甚至想要一個數組嗎?你在做什麼最好的解決辦法是使用一維的變長列表數組? – user2357112

+0

在實際問題中,這些'[5]'是'[?]',表示缺少數據,我希望它們從數據集中刪除。一種方法是初始化另一個數組,該數組使用'[?]'不存在的行索引。結構不穩定的原因是因爲一些樣本對應於多個類別。對於機器學習術語抱歉,但這是我能想到解釋這種數組的重要性的唯一方法。 – Curious

回答

3

這應該這樣做:

[i[0] for i,v in np.ndenumerate(ar) if v == [5]] 
=> [0, 3, 4] 
3

如果您檢查數組的ndim你會看到,它實際上不是一個多維數組,但是列表對象的數組。

您可以使用以下列表解析獲得其中5出現指數:

[i[0] for i,v in np.ndenumerate(a) if 5 in v] 
#[0, 2, 3, 4] 

或下面的列表中理解,以獲得指數在名單是完全[5]

[i[0] for i,v in np.ndenumerate(a) if v == [5]] 
#[0, 3, 4] 
2

你可以使用這裏的列表理解:

[i[0] for i,v in np.ndenumerate(a) if 5 in v] 
#[0, 2, 3, 4]