SCM

SCM Repository

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

Diff of /pkg/src/dgCMatrix.c

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

revision 476, Wed Feb 2 11:51:24 2005 UTC revision 478, Wed Feb 2 14:33:51 2005 UTC
# Line 1  Line 1 
1  #include "cscMatrix.h"  #include "dgCMatrix.h"
2    
3  SEXP csc_validate(SEXP x)  SEXP csc_validate(SEXP x)
4  {  {
# Line 41  Line 41 
41  SEXP csc_crossprod(SEXP x)  SEXP csc_crossprod(SEXP x)
42  {  {
43      SEXP pslot = GET_SLOT(x, Matrix_pSym),      SEXP pslot = GET_SLOT(x, Matrix_pSym),
44          ans = PROTECT(NEW_OBJECT(MAKE_CLASS("sscMatrix"))), tmp;          ans = PROTECT(NEW_OBJECT(MAKE_CLASS("dsCMatrix"))), tmp;
45      int *xp = INTEGER(pslot),      int *xp = INTEGER(pslot),
46          *xi = INTEGER(GET_SLOT(x, Matrix_iSym));          *xi = INTEGER(GET_SLOT(x, Matrix_iSym));
47      double *xx = REAL(GET_SLOT(x, Matrix_xSym));      double *xx = REAL(GET_SLOT(x, Matrix_xSym));
# Line 98  Line 98 
98      SET_SLOT(ans, Matrix_xSym, allocVector(REALSXP, nnz));      SET_SLOT(ans, Matrix_xSym, allocVector(REALSXP, nnz));
99      Memcpy(REAL(GET_SLOT(ans, Matrix_xSym)), xVal, nnz);      Memcpy(REAL(GET_SLOT(ans, Matrix_xSym)), xVal, nnz);
100      Free(iVal); Free(xVal); UNPROTECT(1);      Free(iVal); Free(xVal); UNPROTECT(1);
101      return cscMatrix_set_Dim(ans, ncol);      return dgCMatrix_set_Dim(ans, ncol);
102  }  }
103    
104  SEXP csc_tcrossprod(SEXP x)  SEXP csc_tcrossprod(SEXP x)
105  {  {
106      SEXP pslot = GET_SLOT(x, Matrix_pSym),      SEXP pslot = GET_SLOT(x, Matrix_pSym),
107          ans = PROTECT(NEW_OBJECT(MAKE_CLASS("sscMatrix")));          ans = PROTECT(NEW_OBJECT(MAKE_CLASS("dsCMatrix")));
108      int *xp = INTEGER(pslot),      int *xp = INTEGER(pslot),
109          *xi = INTEGER(GET_SLOT(x, Matrix_iSym)),          *xi = INTEGER(GET_SLOT(x, Matrix_iSym)),
110          *dims = INTEGER(GET_SLOT(x, Matrix_DimSym));          *dims = INTEGER(GET_SLOT(x, Matrix_DimSym));
# Line 146  Line 146 
146      SET_SLOT(ans, Matrix_pSym, allocVector(INTSXP, nrow + 1));      SET_SLOT(ans, Matrix_pSym, allocVector(INTSXP, nrow + 1));
147      ansp = INTEGER(GET_SLOT(ans, Matrix_pSym));      ansp = INTEGER(GET_SLOT(ans, Matrix_pSym));
148      itmp = Calloc(ntrip, int); xtmp = Calloc(ntrip, double);      itmp = Calloc(ntrip, int); xtmp = Calloc(ntrip, double);
149      triplet_to_col(nrow, nrow, ntrip, iVal, jVal, xVal,      dgTMatrix_to_dgCMatrix(nrow, nrow, ntrip, iVal, jVal, xVal,
150                     ansp, itmp, xtmp);                     ansp, itmp, xtmp);
151      nnz = ansp[nrow];      nnz = ansp[nrow];
152      SET_SLOT(ans, Matrix_uploSym, ScalarString(mkChar("L")));      SET_SLOT(ans, Matrix_uploSym, ScalarString(mkChar("L")));
# Line 191  Line 191 
191      return ans;      return ans;
192  }  }
193    
194  SEXP csc_to_triplet(SEXP x)  SEXP csc_to_dgTMatrix(SEXP x)
195  {  {
196      SEXP      SEXP
197          ans = PROTECT(NEW_OBJECT(MAKE_CLASS("tripletMatrix"))),          ans = PROTECT(NEW_OBJECT(MAKE_CLASS("dgTMatrix"))),
198          dimslot = GET_SLOT(x, Matrix_DimSym),          dimslot = GET_SLOT(x, Matrix_DimSym),
199          islot = GET_SLOT(x, Matrix_iSym),          islot = GET_SLOT(x, Matrix_iSym),
200          pslot = GET_SLOT(x, Matrix_pSym);          pslot = GET_SLOT(x, Matrix_pSym);
# Line 238  Line 238 
238      return ans;      return ans;
239  }  }
240    
241  SEXP csc_to_geMatrix(SEXP x)  SEXP csc_to_dgeMatrix(SEXP x)
242  {  {
243      SEXP ans = PROTECT(NEW_OBJECT(MAKE_CLASS("geMatrix"))),      SEXP ans = PROTECT(NEW_OBJECT(MAKE_CLASS("dgeMatrix"))),
244          Dimslot = GET_SLOT(x, Matrix_DimSym);          Dimslot = GET_SLOT(x, Matrix_DimSym);
245      int *dims = INTEGER(Dimslot),      int *dims = INTEGER(Dimslot),
246          *xp = INTEGER(GET_SLOT(x, Matrix_pSym)),          *xp = INTEGER(GET_SLOT(x, Matrix_pSym)),
# Line 266  Line 266 
266    
267  SEXP matrix_to_csc(SEXP A)  SEXP matrix_to_csc(SEXP A)
268  {  {
269      SEXP val = PROTECT(NEW_OBJECT(MAKE_CLASS("cscMatrix")));      SEXP val = PROTECT(NEW_OBJECT(MAKE_CLASS("dgCMatrix")));
270      int *adims = INTEGER(getAttrib(A, R_DimSymbol)), j,      int *adims = INTEGER(getAttrib(A, R_DimSymbol)), j,
271          maxnz, nrow, ncol, nnz, *vp, *vi;          maxnz, nrow, ncol, nnz, *vp, *vi;
272    
# Line 300  Line 300 
300      Memcpy(REAL(GET_SLOT(val, Matrix_xSym)), vx, nnz);      Memcpy(REAL(GET_SLOT(val, Matrix_xSym)), vx, nnz);
301      Free(vi); Free(vx);      Free(vi); Free(vx);
302      UNPROTECT(1);      UNPROTECT(1);
303      return cscMatrix_set_Dim(val, nrow);      return dgCMatrix_set_Dim(val, nrow);
304  }  }
305    
306    
307  SEXP triplet_to_csc(SEXP triplet)  SEXP dgTMatrix_to_csc(SEXP dgTMatrix)
308  {  {
309      SEXP Tisl = GET_SLOT(triplet, Matrix_iSym);      SEXP Tisl = GET_SLOT(dgTMatrix, Matrix_iSym);
310      int *Ti = INTEGER(Tisl),      int *Ti = INTEGER(Tisl),
311          *Tj = INTEGER(GET_SLOT(triplet, Matrix_jSym)),          *Tj = INTEGER(GET_SLOT(dgTMatrix, Matrix_jSym)),
312          i, nrow, ncol,          i, nrow, ncol,
313          nz = length(Tisl);          nz = length(Tisl);
314    
# Line 318  Line 318 
318          if (Tj[i] > ncol) ncol = Tj[i];          if (Tj[i] > ncol) ncol = Tj[i];
319      }      }
320      return triple_as_SEXP(nrow + 1, ncol + 1, nz, Ti, Tj,      return triple_as_SEXP(nrow + 1, ncol + 1, nz, Ti, Tj,
321                            REAL(GET_SLOT(triplet, Matrix_xSym)),                            REAL(GET_SLOT(dgTMatrix, Matrix_xSym)),
322                            "cscMatrix");                            "dgCMatrix");
323  }  }
324    
325  SEXP csc_getDiag(SEXP x)  SEXP csc_getDiag(SEXP x)
# Line 350  Line 350 
350  SEXP csc_transpose(SEXP x)  SEXP csc_transpose(SEXP x)
351  {  {
352      SEXP      SEXP
353          ans = PROTECT(NEW_OBJECT(MAKE_CLASS("cscMatrix"))),          ans = PROTECT(NEW_OBJECT(MAKE_CLASS("dgCMatrix"))),
354          islot = GET_SLOT(x, Matrix_iSym);          islot = GET_SLOT(x, Matrix_iSym);
355      int nnz = length(islot),      int nnz = length(islot),
356          *adims = INTEGER(GET_SLOT(ans, Matrix_DimSym)),          *adims = INTEGER(GET_SLOT(ans, Matrix_DimSym)),
# Line 404  Line 404 
404    
405  SEXP csc_col_permute(SEXP x, SEXP perm)  SEXP csc_col_permute(SEXP x, SEXP perm)
406  {  {
407      SEXP val = PROTECT(NEW_OBJECT(MAKE_CLASS("cscMatrix"))), tmp;      SEXP val = PROTECT(NEW_OBJECT(MAKE_CLASS("dgCMatrix"))), tmp;
408      int *iperm, *prm, *vi, *vp, *xi, *xp, j, k, ncol, pos;      int *iperm, *prm, *vi, *vp, *xi, *xp, j, k, ncol, pos;
409      double *vx, *xx;      double *vx, *xx;
410    

Legend:
Removed from v.476  
changed lines
  Added in v.478

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