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
        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:
            cost = lambda_ij_score(scores[i], scores[j], labels[i], labels[j])

    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!