def compute_item_metric(test: ss.csr_matrix, mat_rank: ss.csr_matrix, cand_count: np.ndarray, cutoff: int = 200): rel_count = (test != 0).sum(axis=1) istopk = mat_rank.max() < test.shape[1] * 0.5 recall, precision, map = Eval.compute_recall_precision( mat_rank, rel_count, cutoff) ndcg = Eval.compute_ndcg(test, mat_rank, cutoff) if not istopk: auc, mpr = Eval.compute_auc(mat_rank, rel_count, cand_count) return { 'item_recall': recall, 'item_prec': precision, 'item_map': map, 'item_ndcg': ndcg, 'item_mpr': mpr, 'item_auc': auc } else: return { 'item_recall': recall, 'item_prec': precision, 'item_map': map, 'item_ndcg': ndcg }