import numpy as np def F_measure(cm): idx = 0 rs, ps, fs = [], [], [] n_class = cm.shape[0] for idx in range(n_class): TP = cm[idx][idx] r = TP / cm[idx].sum() if cm[idx].sum() != 0 else 0 p = TP / cm[:, idx].sum() if cm[:, idx].sum() != 0 else 0 f = 2 * r * p / (r + p) if (r + p) != 0 else 0 rs.append(r * 100) ps.append(p * 100) fs.append(f * 100) f = np.mean(fs).round(4) f_seen = np.mean(fs[:-1]).round(4) f_unseen = round(fs[-1], 4) results = {} results['F1-known'] = f_seen results['F1-open'] = f_unseen results['F1'] = f return results