SCM

SCM Repository

[matrix] Diff of /pkg/Matrix/src/Csparse.c
ViewVC logotype

Diff of /pkg/Matrix/src/Csparse.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2984, Sat Apr 12 21:37:37 2014 UTC revision 3018, Sat Oct 11 17:52:10 2014 UTC
# Line 345  Line 345 
345  SEXP Csparse_dense_prod(SEXP a, SEXP b)  SEXP Csparse_dense_prod(SEXP a, SEXP b)
346  {  {
347      CHM_SP cha = AS_CHM_SP(a);      CHM_SP cha = AS_CHM_SP(a);
348      SEXP b_M = PROTECT(mMatrix_as_dgeMatrix(b));      SEXP b_M = PROTECT(mMatrix_as_dgeMatrix2(b, // transpose_if_vector =
349                                                 cha->ncol == 1));
350      CHM_DN chb = AS_CHM_DN(b_M);      CHM_DN chb = AS_CHM_DN(b_M);
351      CHM_DN chc = cholmod_allocate_dense(cha->nrow, chb->ncol, cha->nrow,      CHM_DN chc = cholmod_allocate_dense(cha->nrow, chb->ncol, cha->nrow,
352                                          chb->xtype, &c);                                          chb->xtype, &c);
# Line 376  Line 377 
377  SEXP Csparse_dense_crossprod(SEXP a, SEXP b)  SEXP Csparse_dense_crossprod(SEXP a, SEXP b)
378  {  {
379      CHM_SP cha = AS_CHM_SP(a);      CHM_SP cha = AS_CHM_SP(a);
380      SEXP b_M = PROTECT(mMatrix_as_dgeMatrix(b));      SEXP b_M = PROTECT(mMatrix_as_dgeMatrix2(b, // transpose_if_vector =
381                                                 cha->nrow == 1));
382      CHM_DN chb = AS_CHM_DN(b_M);      CHM_DN chb = AS_CHM_DN(b_M);
383      CHM_DN chc = cholmod_allocate_dense(cha->ncol, chb->ncol, cha->ncol,      CHM_DN chc = cholmod_allocate_dense(cha->ncol, chb->ncol, cha->ncol,
384                                          chb->xtype, &c);                                          chb->xtype, &c);
# Line 569  Line 571 
571      if (csize >= 0 && !isInteger(j))      if (csize >= 0 && !isInteger(j))
572          error(_("Index j must be NULL or integer"));          error(_("Index j must be NULL or integer"));
573    
574    #define CHM_SUB(_M_, _i_, _j_)                                  \
575        cholmod_submatrix(_M_,                                      \
576                          (rsize < 0) ? NULL : INTEGER(_i_), rsize, \
577                          (csize < 0) ? NULL : INTEGER(_j_), csize, \
578                          TRUE, TRUE, &c)
579        CHM_SP ans;
580      if (!chx->stype) {/* non-symmetric Matrix */      if (!chx->stype) {/* non-symmetric Matrix */
581          return chm_sparse_to_SEXP(cholmod_submatrix(chx,          ans = CHM_SUB(chx, i, j);
                                                     (rsize < 0) ? NULL : INTEGER(i), rsize,  
                                                     (csize < 0) ? NULL : INTEGER(j), csize,  
                                                     TRUE, TRUE, &c),  
                                   1, 0, Rkind, "",  
                                   /* FIXME: drops dimnames */ R_NilValue);  
582      }      }
583        else {
584                                  /* for now, cholmod_submatrix() only accepts "generalMatrix" */                                  /* for now, cholmod_submatrix() only accepts "generalMatrix" */
585      CHM_SP tmp = cholmod_copy(chx, /* stype: */ 0, chx->xtype, &c);      CHM_SP tmp = cholmod_copy(chx, /* stype: */ 0, chx->xtype, &c);
586      CHM_SP ans = cholmod_submatrix(tmp,          ans = CHM_SUB(tmp, i, j);
                                    (rsize < 0) ? NULL : INTEGER(i), rsize,  
                                    (csize < 0) ? NULL : INTEGER(j), csize,  
                                    TRUE, TRUE, &c);  
587      cholmod_free_sparse(&tmp, &c);      cholmod_free_sparse(&tmp, &c);
588      return chm_sparse_to_SEXP(ans, 1, 0, Rkind, "", R_NilValue);      }
589    
590        // "FIXME": currently dropping dimnames, and adding them afterwards in R :
591        /* // dimnames: */
592        /* SEXP x_dns = GET_SLOT(x, Matrix_DimNamesSym), */
593        /*  dn = PROTECT(allocVector(VECSXP, 2)); */
594        return chm_sparse_to_SEXP(ans, 1, 0, Rkind, "", /* dimnames: */ R_NilValue);
595  }  }
596    
597  #define _d_Csp_  #define _d_Csp_

Legend:
Removed from v.2984  
changed lines
  Added in v.3018

root@r-forge.r-project.org
ViewVC Help
Powered by ViewVC 1.0.0  
Thanks to:
Vienna University of Economics and Business University of Wisconsin - Madison Powered By FusionForge