示例#1
0
文件: symeig.cpp 项目: caomw/dolphin
inline void flip(ref_col<T>& evs)
{
    index_t l = 0;
    index_t r = evs.nelems() - 1;
    while (l < r)
    {
        swap(evs[l], evs[r]);
        ++l; --r;
    }
}
void idx_group(const cref_matrix<int32_t>& L, 
        ref_col<int32_t>& sx,
        ref_col<int32_t>& b, 
        ref_col<int32_t>& e)
{
    const int32_t K = (int32_t)b.nelems();
    const int32_t n = (int32_t)L.nelems();
    
    // first pass: count labels (use e as temporary store)
    
    for (int32_t i = 0; i < n; ++i)
    {
        int32_t k = L[i];
        if (k >= 0 && k < K) ++ e[k];
    }
    
    // set b and e
    
    int32_t pre_e = 0;
    for (int32_t k = 0; k < K; ++k)
    {
        b[k] = pre_e;
        pre_e += e[k];
        e[k] = b[k];
        
    }
    
    // second pass: fill in indices (and advance e)
    
    for (int32_t i = 0; i < n; ++i)
    {
        int32_t k = L[i];
        if (k >= 0 && k < K)
        {
            sx[e[k]++] = (i + 1);
        }
    }    
}