I have a graph with 1034 vertices and 53498 edges. I'm manually computing the preferential attachement index for the vertices, and other indices. I'm aware that graph-tool has that implemented but I'm doing it for personal stuff. However I noticed that my computations are very slow. It took 2.7 minutes to compute that for the mentioned graph. I'm not sure if it's my algorithm that is slow or the something is wrong with graph-tool. I would be very thankful if someone could have a little look into my code.

def pa(graph):

    """

        Calculates Preferential Attachment index.

        Returns S the similarity matrix.

    """

    A = gts.adjacency(graph)

    S = np.zeros(A.shape)

    for i in xrange(S.shape[0]):

        for j in xrange(S.shape[0]):

            i_degree = graph.vertex(i).out_degree()

            j_degree = graph.vertex(j).out_degree()

            factor = i_degree * j_degree

            S[i,j] = factor

    return S