def cardinalities(xs, ys, sz): T = to_tensor(xs, ys, sz) c_head = [] c_tail = [] for Ti in T: sh = Ti.tocsr().sum(axis=1) st = Ti.tocsc().sum(axis=0) c_head.append(sh[np.where(sh)].mean()) c_tail.append(st[np.where(st)].mean()) cards = {'1-1': [], '1-N': [], 'M-1': [], 'M-N': []} for k in range(sz[2]): if c_head[k] < 1.5 and c_tail[k] < 1.5: cards['1-1'].append(k) elif c_head[k] < 1.5: cards['1-N'].append(k) elif c_tail[k] < 1.5: cards['M-1'].append(k) else: cards['M-N'].append(k) return cards