def soft_contingency_table(resp1, resp2):
    """Compute the soft contingency table for two responsibility matrices
    
    Args:
        resp1 (numpy array): N x K_1 responsibility matrix - each row is a probability
            vector for one of the N items belonging to each of K_1 modes
        resp1 (numpy array): N x K_2 responsibility matrix - each row is a probability
            vector for one of the N items belonging to each of K_2 modes
    
    Returns:
        (numpy array): K_1 x K_2 contingency table for soft clustering - defined as
            resp1^T resp2
    """
    return resp1.T @ resp2