我有3个数据集,分别包含预测、用户名和标签。使用下面的代码,我对用户的预测进行平均(基于Jaime和alium的帮助)。标签与每个观察值相关联,因此存在冗余信息。我想使用idx
查找每个用户的唯一标签。在NumPy我该怎么做
>>> pred
[ 0.99 0.23 0.11 0.64 0.45 0.55 0.76 0.72 0.97 ]
>>> users
['User2' 'User3' 'User2' 'User3' 'User0' 'User1' 'User4' 'User4' 'User4']
>>> label
[ 1 0 1 0 0 1 0 0 0 ]
unq, idx, cnt = np.unique(user_data, return_inverse=True, return_counts=True) # assign integer indices to each unique user name, and get the total number of occurrences for each name
predictions_user = np.bincount(idx, weights=pred) / cnt # now sum the values of pred corresponding to each index value and divide to get the mean
输出当前为:
>>> unq
array(['User0', 'User1', 'User2', 'User3', 'User4'], dtype='|S5')
>>> predictions_user
array([ 0.45, 0.55, 0.55, 0.435, 0.81666667])
我想添加最后一个变量,名为label_user
。每个值都是与unq
中相同索引处的用户关联的标签
样本输出:
>>> label_user
array([0, 1, 1, 0, 0])
可以通过将
return_index=True
传递给np.unique
来实现这一点。从the docs:这将为您提供
user_data
的一组索引,这些索引在unq
中提供唯一的值。要获得unq
中每个值对应的标签,只需使用这些索引索引labels
:我已经将“逆”索引数组重命名为
inv_idx
,以便与idx
区分开来与计算每个唯一用户名的平均值一样,还有一种简单的方法可以使用pandas获得相应的标签:
相关问题 更多 >
编程相关推荐