map计算

import numpy as np
data_feature = np.random.rand(10000,512)
data_lable = np.random.randint(low = 1, high = 10, size = 10000)
#print(data_lable)
query = np.random.rand(1,512)
query_label = 1
# M = np.dot(data_feature,query.T)
# rank = M.flatten().argsort()[::-1]
# rank_label = data_lable[rank]
# hit_index = np.argwhere(query_label == rank_label[:10])
# print("query_label:", query_label)
# print("rank_label:", rank_label[:10])
# print("hit_index:",hit_index.flatten())
# hit = np.cumsum(query_label == rank_label[:10])
# print("hit:", hit)
# print(hit[hit_index] / (hit_index + 1))
# AP = np.mean(hit[hit_index] / (hit_index + 1), axis = 0)
# print("AP", AP)


def AP(data_feature,data_label, query,query_label, k):
    """
    :param data_label: 图像数据库的标签
    :param query_label: 查询数据的标签
    :param k: 前多少张图片
    :return: map:前K张图片查询准确度
    """
    data_lable = data_label
    M = np.dot(data_feature, query.T)
    rank = M.flatten().argsort()[::-1]
    rank_label = data_lable[rank]
    hit_index = np.argwhere(query_label == rank_label[:k])
    print("query_label:", query_label)
    print("rank_label:", rank_label[:10])
    print("hit_index:", hit_index.flatten())
    hit = np.cumsum(query_label == rank_label[:10])
    print("hit:", hit)
    if len(hit_index) == 0:
        return "not hit"
    print(hit[hit_index] / (hit_index + 1))
    AP = np.mean(hit[hit_index] / (hit_index + 1), axis=0)
    print("AP", AP)
    return AP
if __name__ == '__main__':
    AP = AP(data_feature, data_lable, query, query_label, k = 1)
    print("AP:", AP)


query_label: 1
rank_label: [2 5 5 4 2 7 4 8 2 7 3 1 9 6 1 6 7 1 6 8]
hit_index: [11 14 17]
hit: [0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 3 3 3]
[[0.08333333]
 [0.13333333]
 [0.16666667]]
AP [0.12777778]
AP: [0.12777778]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值