コード例 #1
0
ファイル: interpret.c プロジェクト: dvitsios/align-paths
mclVector*  mcxAttractivityScale
(  const mclMatrix*           M
)
{   dim n_cols = N_COLS(M)
                 ;
    dim d

    ;
    mclVector* vec_values = mclvResize(NULL, n_cols)

                            ;
    for (d=0; d<n_cols; d++)
    {   mclVector*  vec   =  M->cols+d
                             ;
        double   selfval  =  mclvIdxVal(vec, d, NULL)
                             ;
        double   maxval   =  mclvMaxValue(vec)
                             ;
        if (maxval <= 0.0)
        {   mcxErr
            (  "mcxAttractivityScale"
               ,  "encountered nonpositive maximum value"
            )
            ;
            maxval = 1.0
                     ;
        }
        (vec_values->ivps+d)->idx = d
                                    ;
        (vec_values->ivps+d)->val = selfval / maxval
                                    ;
    }
    return vec_values
           ;
}
コード例 #2
0
ファイル: dpsd.c プロジェクト: BB90/CommunityDetectionCodes
mclMatrix* mclDiagOrdering
(  const mclMatrix*     M
,  mclVector**          vecp_attr
)
   {  int         n_cols      =  N_COLS(M)
   ;  mclMatrix*  diago       =  mclxAllocZero(NULL, NULL)
   ;  long        col

   ;  if (*vecp_attr != NULL)
      mclvFree(vecp_attr)

   ;  *vecp_attr = mclvResize(NULL, n_cols)

   ;  for (col=0;col<n_cols;col++)
      {  ofs      offset      =  -1
      ;  double   selfval     =  mclvIdxVal(M->cols+col, col, &offset)
      ;  double   center      =  mclvPowSum(M->cols+col, 2.0)
     /*  double   maxval      =  mclvMaxValue(M->cols+col)
      */
      ;  double   bar         =  MCX_MAX(center, selfval) - dpsd_delta
      ;  mclIvp*  ivp         =  (*vecp_attr)->ivps+col

      ;  ivp->idx             =  col
      ;  ivp->val             =  center ? selfval / center : 0

      ;  if (offset >= 0)                 /* take only higher valued entries */
         mclvSelectGqBar(diago->cols+col, bar)
   ;  }
   ;  return diago
;  }
コード例 #3
0
ファイル: mcxmm.c プロジェクト: BioDAG/align-paths
void test_cross_ratio
(  mclx* mx
)
   {  dim i, j, n = 0
   ;  for (i=0;i<N_COLS(mx);i++)
      {  mclv* v = mx->cols+i
      ;  double selfv = mclvSelf(v)
      ;  for (j=0;j<v->n_ivps;j++)
         {  mclv* w = mclxGetVector(mx, v->ivps[j].idx, EXIT_ON_FAIL, NULL)
         ;  double arc  =  v->ivps[j].val
         ;  double selfw=  mclvSelf(w)
         ;  double cra  =  mclvIdxVal(w, v->vid, NULL)
         ;  double s    =  MCX_MIN(selfv, selfw)
         ;  if (s > arc || s > cra)
            fprintf
            (  stdout
            ,  "%u\t%u\t%g\t%g\t%g\t%g\n"
            ,  (unsigned) v->vid
            ,  (unsigned) w->vid
            ,  arc
            ,  cra
            ,  selfv
            ,  selfw
            )
         ;  n++
      ;  }
      }
      fprintf(stderr, "tested %u entries\n", (unsigned) n)
;  }
コード例 #4
0
ファイル: interpret.c プロジェクト: dvitsios/align-paths
mclMatrix* mclDag
(  const mclMatrix*  A
   ,  const mclInterpretParam* ipp
)
{   dim d

    ;
    double w_selfval= ipp ? ipp->w_selfval: 0.999
                      ;
    double w_maxval = ipp ? ipp->w_maxval : 0.001
                      ;
    double delta    = ipp ? ipp->delta    : 0.01

                      ;
    mclMatrix* M = mclxAllocZero
                   (  mclvCopy(NULL, A->dom_cols)
                      ,  mclvCopy(NULL, A->dom_rows)
                   )
                   ;
    for (d=0; d<N_COLS(A); d++)         /* thorough clean-up */
    {   mclVector*  vec      =  A->cols+d
                                ;
        mclVector*  dst      =  M->cols+d
                                ;
        double      selfval  =  mclvIdxVal(vec, vec->vid, NULL)
                                ;
        double      maxval   =  mclvMaxValue(vec)
                                ;
        double      bar      =  selfval < maxval
                                ?  (  (w_selfval * selfval)
                                      +  (w_maxval * maxval)
                                   )
                                :     delta
                                ?  selfval / (1 + delta)
                                :  selfval
                                ;
        int n_bar =  mclvCountGiven(vec, mclpGivenValGQ, &bar)
                     ;
        mclvCopyGiven(dst, vec, mclpGivenValGQ, &bar, n_bar)
        ;
    }
    if (0)
    {   dim ne = mclxNrofEntries(M)
                 ;
        fprintf(stderr, "nroff entries %u\n", (unsigned) ne)
        ;
    }
    return M
           ;
}
コード例 #5
0
ファイル: vector.c プロジェクト: BioDAG/align-paths
double mclvSelf
(  const mclVector* vec
)  
   {  return vec ? mclvIdxVal(vec, vec->vid, NULL) :  0.0
;  }