Vectorized version of function

I need to calculate the lambda i score for two given tensors.

def lambda_ij_score(score_i, score_j, label_i, label_j):
    if label_i > label_j:
        S_i_j = 1
    elif label_j > label_i:
        S_i_j = -1
    else:
        S_i_j = 0
    return 0.5 * (1 - S_i_j) - (1 / (1 + np.exp(score_i - score_j)))

def compute_lambda_i(scores, labels):
    all_costs = []
    for i in range(len(scores)):
        current_costs = []
        for j in range(len(scores)):
            if i == j:
                continue
            cost = lambda_ij_score(scores[i], scores[j], labels[i], labels[j])
            current_costs.append(cost)
        all_costs.append(np.sum(current_costs))

    return torch.FloatTensor(all_costs).unsqueeze(1)

scores is a tensor of size [N, 1] and labels a tensor of size [N].
While this function does work, it seems very inefficient.

I am very new to PyTorch and would like to find out if there is a neat vectorized version to calculate the desired result.

I am happy about any hints on how to do that!