Python: argsort()函数使用说明记录

argsort(array):返回的是从小到大排序的索引。

形式1:argsort(array) 

>>> a=[5,2,3]
>>> b=np.argsort(a)
>>> b
array([1, 2, 0])
>>>

5,2,3的从小到大的2,3,5,索引分别是[1,2,0] 返回的是这个。

 

在faster中的layer_utils文件夹的proposal_top_layer.py中有如下代码段

  #统计有多少个框
  length = scores.shape[0]
  if length < rpn_top_n:#如果小于5000,就随机采样,就是说如果框少于5000个,我也要随机重复采样,让它变成5000个框。
    # Random selection, maybe unnecessary and loses good proposals
    # But such case rarely happens
    top_inds = npr.choice(length, size=rpn_top_n, replace=True)#size是采样的数量,replace为true为有放回采样,false为不放回采样。
  else:
    top_inds = scores.argsort(0)[::-1]
    top_inds = top_inds[:rpn_top_n]
    top_inds = top_inds.reshape(rpn_top_n, )

注意到

top_inds = scores.argsort(0)[::-1]

这里面,argsort的形式为:np.argsort()[num]

0应该时一个维度问题,下面分情况研究一下。

 

形式2:array.argsort(axi=0或者1)

当argsort(0)时,按矩阵列从小到大排序

当argsort(1)时,按矩阵行从小到大排序

>>> a
array([[2, 3],
       [5, 3],
       [6, 4]])
>>> b=a.argsort(1)
>>> b
array([[0, 1],
       [1, 0],
       [1, 0]])
>>> b=a.argsort(0)
>>> b
array([[0, 0],
       [1, 1],
       [2, 2]])

 

加上num就是另一种形式了

形式3:array.argsort(axi=0或者1)[num]

Num很好理解,就是从小到大排序,如果是num=2,就找排序后下标是2的数的索引,下标从0开始,所以2就是第三大的数所对应的索引。但这个时候,前面的(axi=0或者1)意思与形式2不同,0代表的是从小到大排序,1代表的是从大到小排序。

所以下面的例子中,

a.argsort(0)[2]返回的是下标为2也就是第三大的数,

a.argsort(1)[2]表示的是第三小的数,这里维度只有3,所以也就是最小的数。

注意到,都是按列来算的。跟a.argsort(0)和a.argsort(1)意思已经不一样了。

>>> a
array([[2, 3],
       [5, 1],
       [6, 4],
       [4, 9]])
>>> b=a.argsort(1)[3]
>>> b
array([0, 1])
>>> b=a.argsort(0)[3]
>>> b
array([2, 3])
>>> a
array([[2, 3],
       [5, 1],
       [6, 4],
       [4, 9]])

再举一个例子

>>> a
array([[2, 3],
       [5, 1],
       [6, 4]])
>>> a
array([[2, 3],
       [5, 1],
       [6, 4]])
>>> b=a.argsort(0)[2]
>>> b
array([2, 2])
>>> b=a.argsort(1)[2]
>>> b
array([1, 0])
>>>

从小到大排序,排序后第三大的数对应的索引,按列来看,就是array([2, 2])对应下面第一列的6和第二列的4

>>> a
array([[2, 3],
       [5, 1],
       [6, 4]])

而b=a.argsort(1)[2]就是从大到小排序,倒数最第三大的,也就是从小到大排序中最小的,分别是第一列的2和第二列的1,索引分别是array([1, 0])。验证完毕。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 协同过滤是一种常用的推荐算法,可以使用Python来实现。以下是一个简单的例子: 首先,需要准备一个用户-物品评分矩阵,可以使用pandas库读取csv文件或者使用numpy库生成一个矩阵。 然后,可以使用scikit-learn库中的NearestNeighbors模型进行相似度计算和最近邻搜索。 最后,根据用户的历史评分和相似用户的评分进行推荐。 以下是一个示例代码: ```python import numpy as np from sklearn.neighbors import NearestNeighbors # 生成一个用户-物品评分矩阵,行表示用户,列表示物品 ratings = np.array([ [5, 3, 0, 1], [4, 0, 4, 4], [0, 3, 5, 2], [3, 0, 4, 0], [0, 4, 0, 4], [2, 2, 0, 5], [0, 0, 3, 0] ]) # 计算用户之间的相似度 knn = NearestNeighbors(metric='cosine', algorithm='brute') knn.fit(ratings) distances, indices = knn.kneighbors(ratings, n_neighbors=3) # 根据相似用户的评分进行推荐 user_id = 0 similar_users = indices[user_id][1:] recommendations = np.zeros(ratings.shape[1]) for user in similar_users: recommendations += ratings[user] recommendations /= len(similar_users) print(recommendations) ``` 以上代码中,使用余弦相似度进行相似度计算,使用brute-force算法进行最近邻搜索,推荐给用户0的物品评分为[2. 2.66666667 3.33333333 2.]。 ### 回答2: 协同过滤是一种常用的推荐算法,其基本原理是通过分析用户的历史行为和偏好,找到与其相似的其他用户或物品,然后利用这些相似度关系进行推荐。 在Python中,可以使用多种方法实现协同过滤推荐算法。下面介绍两种常用的实现方法: 1. 基于用户的协同过滤算法: 首先,需要构建用户与物品的评分矩阵,矩阵的每个元素表示用户对物品的评分。然后,计算用户之间的相似度,常用的计算方法有余弦相似度和皮尔逊相关系数。根据用户相似度计算出目标用户与其他用户的相似度得分,再根据相似度权重和其他用户对物品的评分,预测目标用户对未评分物品的评分,从高到低进行推荐。 2. 基于物品的协同过滤算法: 和基于用户的协同过滤算法类似,不同之处是首先计算物品之间的相似度,然后根据相似度关系对目标用户未评分的物品进行预测评分,并进行推荐。 Python中有许多强大的开源库可以用于实现协同过滤推荐算法,比如NumPy和SciPy用于矩阵计算和相似度计算,pandas用于数据处理和分析,scikit-learn用于机器学习算法的实现。此外,还有一些专门用于推荐系统的库,如Surprise和LightFM。 使用Python实现协同过滤算法的主要步骤包括数据准备、相似度计算和推荐预测。可以根据实际需求选择适合的方法和库进行实现。 ### 回答3: 协同过滤推荐算法是一种基于用户行为的个性化推荐算法。它通过分析用户的行为数据,如用户的购买记录、评价、点击等,来发现用户之间的相似性,并根据用户的相似性来推荐给用户可能感兴趣的物品。 在Python中,我们可以使用协同过滤推荐算法来实现个性化推荐。有两种常见的协同过滤算法,分别为基于用户的协同过滤和基于物品的协同过滤。 基于用户的协同过滤算法,首先计算用户之间的相似度,一种常见的计算相似度的方法是使用余弦相似度。然后根据用户的相似度,找到与当前用户相似的其他用户,并推荐这些用户喜欢的物品给当前用户。 基于物品的协同过滤算法,首先计算物品之间的相似度,同样可以使用余弦相似度。然后根据物品的相似度,找到当前用户喜欢的物品,然后推荐与这些物品相似的其他物品给当前用户。 在Python中,我们可以使用一些第三方库来实现协同过滤推荐算法,如scikit-learn、numpy等。这些库提供了一些实用的函数和类,可以帮助我们计算相似度,并进行推荐。 例如,我们可以使用scikit-learn中的cosine_similarity函数来计算余弦相似度,使用numpy中的argsort函数来找到相似度最高的用户或物品。然后根据相似度最高的用户或物品的喜好,进行推荐。 总结来说,协同过滤推荐算法是一种基于用户行为的个性化推荐算法,在Python中可以使用一些第三方库来实现。通过计算用户或物品之间的相似度,并根据相似度进行推荐,可以提高用户的满意度和推荐的准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值