In [1]:
import numpy as np
import pandas as pd

In [2]:
def similarity(U):
    num_users = U.shape[0]
    sim = np.zeros((num_users, num_users))
    min_dist = 0.001
    for i in range(num_users):
        for j in range(i):
            s = 1 / (min_dist + np.arccos(np.dot(U[i,:], U[j,:].T))/(np.linalg.norm(U[i,:])*np.linalg.norm(U[j,:])) / np.pi)
            sim[i,j] = s
            sim[j,i] = s
    return sim

In [ ]: