2013-10-20 47 views
0

我在python中有這種形狀爲10,000x30的矩陣。我想要的是找到行的索引,即從10,000行開始,確定第五列值等於0的索引。在Python中使用matlab的查找操作

如何獲得索引。一旦我得到索引,我想從另一個矩陣B中選擇相應的行。我該如何實現?

+1

誰就建議關閉:我認爲這個問題是相當清楚的,特別是如果你知道任何Matlab或NumPy。然而,一個簡單的谷歌「查找matlab numpy」出現了...... – horchler

回答

0
>>> a = np.random.randint(0, 10, (10, 5)) 
>>> a 
array([[4, 9, 7, 2, 9], 
     [1, 9, 5, 0, 8], 
     [1, 7, 7, 8, 4], 
     [6, 2, 1, 9, 6], 
     [6, 2, 0, 0, 8], 
     [5, 5, 8, 4, 5], 
     [6, 8, 8, 8, 8], 
     [2, 2, 3, 4, 3], 
     [3, 6, 2, 1, 2], 
     [6, 3, 2, 4, 0]]) 
>>> a[:, 4] == 0 
array([False, False, False, False, False, False, False, False, False, True], dtype=bool) 
>>> b = np.random.rand(10, 5) 
>>> b 
array([[ 0.37363295, 0.96763033, 0.72892652, 0.77217485, 0.86549555], 
     [ 0.83041897, 0.35277681, 0.13011611, 0.82887195, 0.87522863], 
     [ 0.88325189, 0.67976957, 0.56058782, 0.58438597, 0.10571746], 
     [ 0.27305838, 0.72306733, 0.01630463, 0.86069002, 0.9458257 ], 
     [ 0.23113894, 0.30396521, 0.92840314, 0.39544522, 0.59708927], 
     [ 0.71878406, 0.91327744, 0.71407427, 0.65388644, 0.416599 ], 
     [ 0.83550209, 0.85024774, 0.96788451, 0.72253464, 0.41661953], 
     [ 0.61458993, 0.34527785, 0.20301719, 0.10626226, 0.00773484], 
     [ 0.87275531, 0.54878131, 0.24933454, 0.29894835, 0.66966912], 
     [ 0.59533278, 0.15037691, 0.37865046, 0.99402371, 0.17325722]]) 
>>> b[a[:,4] == 0] 
array([[ 0.59533278, 0.15037691, 0.37865046, 0.99402371, 0.17325722]]) 
>>> 

爲了得到find樣的結果,而不是使用邏輯索引使用np.where,它返回數組的一個元組,其作爲指標到每個維度:

>>> indices = np.where(a[:, 4] == 0) 
>>> b[indices[0]] 
array([[ 0.59533278, 0.15037691, 0.37865046, 0.99402371, 0.17325722]]) 
>>> 
+0

你演示了更類似於邏輯索引的東西。 Matlab的'find'直接返回滿足條件的索引(或索引)。例如,'idx = find(a(:,5)== 0)'會爲您的第一個數組返回'10'。 – horchler

+0

查看更新的答案 – YXD

+0

也同意這是您已鏈接到的問題的重複 – YXD