考虑一个名为picks_user
的numpy ndarray,其形状为picks_user.shape = (2016,3)
。
'列'表示该顺序中的变量user,item和count。 '行'代表观察。
执行时:
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]
如何以矢量化方式实现此目的,不能用于循环?
更新
考虑以下示例:
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]]
答案 0 :(得分:3)
您可以将np.in1d
用作:
>>> 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]])