コード例 #1
0
static
void create_cluster_dist_mat(
    DenseMat& distMat,
    int cls,
    std::vector<int>& cluster_nodes,
    std::vector<WgtType>& nodes_radii,
    DenseMat& clusterDistMat)
{
    // Steps
    // 1. resize cluster distance matrix
    // 2. match the distance from distMat to clusterDistMat
    // 3. add central node influence

    // Step 1
    clusterDistMat.resize(cluster_nodes.size()+1, cluster_nodes.size()+1);
    clusterDistMat.fill(0);

    // Step 2
    int rowIdx;
    int colIdx;
    for (int c=0; c<cluster_nodes.size(); ++c)
    {
        for (int r=0; r<cluster_nodes.size(); ++r)
        {
            rowIdx = cluster_nodes.at(r);
            colIdx = cluster_nodes.at(c);
            clusterDistMat(r+1, c+1) = distMat(rowIdx, colIdx);
        }
    }

    // Step 3
    for (int i=0; i<nodes_radii.size(); ++i)
    {
        clusterDistMat(0, i+1) = nodes_radii.at(i);
        clusterDistMat(i+1, 0) = nodes_radii.at(i);

    }
}