2016-02-29 51 views
1

考慮一個叫做picks_user的numpy ndarray,形狀爲picks_user.shape = (2016,3)。 「列」按順序表示變量user,item和count。 '行'代表觀察。如何在幾個可能的值中使用numpy?

當執行:

target_users = picks_user[np.where(picks_user[:,1]== 2711)][:,0]

的結果是另一個numpy的ndarray與具有選擇項目2711

都說target_users具有形狀target_users.shape = (14,)用戶。我想用這個數組來獲得由目標用戶挑選的所有項目,類似如下(其中不工作):

picks_user[np.where(picks_user[:,1] == target_users)] 

這可能是等同於:

for element in target_users: 
    picks_user[np.where(picks_user[:,1] == element] 

我如何能實現這是一個矢量化的方式,沒有for循環?

UPDATE

請看下面的例子:

a = np.array([ [1,10,1],[2,11,1],[3,12,1],[4,13,1],[5,10,1],[2,13,1],[1,11,1],[5,16,1]]) 
target_users = a[np.where(a[:,1]==10)][:,0] 

在這種情況下target_users = [1 5]

我想要得到的載體是:

[[1,10,1],[5,10,1],[1,11,1],[5,16,1]] 

回答

3

您可以使用np.in1d as:

>>> picks_user = np.random.randint(0,10, (10,3)) 
>>> picks_user 
array([[7, 8, 7], 
     [6, 0, 9], 
     [5, 6, 7], 
     [6, 7, 3], 
     [0, 1, 3], 
     [8, 7, 5], 
     [2, 6, 6], 
     [7, 9, 8], 
     [1, 7, 1], 
     [9, 8, 4]]) 
>>> target_users = np.array([1,7,8]) 
>>> picks_user[np.in1d(picks_user[:,1], target_users)] 
array([[7, 8, 7], 
     [6, 7, 3], 
     [0, 1, 3], 
     [8, 7, 5], 
     [1, 7, 1], 
     [9, 8, 4]]) 
+0

Yeap!就是這樣,謝謝。 –

相關問題