SCM

SCM Repository

[matrix] Annotation of /pkg/Matrix/src/dtCMatrix.c
ViewVC logotype

Annotation of /pkg/Matrix/src/dtCMatrix.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 70 - (view) (download) (as text)
Original Path: pkg/src/tscMatrix.c

1 : bates 10 /* Sparse triangular matrices */
2 :     #include "tscMatrix.h"
3 :    
4 :     SEXP tsc_validate(SEXP x)
5 :     {
6 :     return ScalarLogical(1);
7 :     }
8 :    
9 :     SEXP tsc_transpose(SEXP x)
10 :     {
11 :     SEXP
12 :     ans = PROTECT(NEW_OBJECT(MAKE_CLASS("tscMatrix"))),
13 :     islot = GET_SLOT(x, Matrix_iSym);
14 :     int nnz = length(islot),
15 :     *adims = INTEGER(GET_SLOT(ans, Matrix_DimSym)),
16 :     *xdims = INTEGER(GET_SLOT(x, Matrix_DimSym));
17 :    
18 :     adims[0] = xdims[1]; adims[1] = xdims[0];
19 :     if (toupper(CHAR(asChar(GET_SLOT(x, Matrix_uploSym)))[0]) == 'U')
20 :     SET_SLOT(ans, Matrix_uploSym, ScalarString(mkChar("L")));
21 :     SET_SLOT(ans, Matrix_pSym, allocVector(INTSXP, xdims[0] + 1));
22 :     SET_SLOT(ans, Matrix_iSym, allocVector(INTSXP, nnz));
23 :     SET_SLOT(ans, Matrix_xSym, allocVector(REALSXP, nnz));
24 :     csc_components_transpose(xdims[0], xdims[1], nnz,
25 :     INTEGER(GET_SLOT(x, Matrix_pSym)),
26 :     INTEGER(islot),
27 :     REAL(GET_SLOT(x, Matrix_xSym)),
28 :     INTEGER(GET_SLOT(ans, Matrix_pSym)),
29 :     INTEGER(GET_SLOT(ans, Matrix_iSym)),
30 :     REAL(GET_SLOT(ans, Matrix_xSym)));
31 :     UNPROTECT(1);
32 :     return ans;
33 :     }
34 : bates 70
35 :     SEXP tsc_to_triplet(SEXP x)
36 :     {
37 :     SEXP ans;
38 :     if (toupper(CHAR(STRING_ELT(GET_SLOT(x, Matrix_diagSym), 0))[0]) != 'U')
39 :     ans = csc_to_triplet(x);
40 :     else { /* unit triangular matrix */
41 :     SEXP islot = GET_SLOT(x, Matrix_iSym),
42 :     pslot = GET_SLOT(x, Matrix_pSym);
43 :     int *ai, *aj, j,
44 :     n = length(pslot) - 1,
45 :     nod = length(islot),
46 :     nout = n + nod,
47 :     *p = INTEGER(pslot);
48 :     double *ax;
49 :    
50 :     ans = PROTECT(NEW_OBJECT(MAKE_CLASS("tripletMatrix")));
51 :     SET_SLOT(ans, Matrix_DimSym, duplicate(GET_SLOT(x, Matrix_DimSym)));
52 :     SET_SLOT(ans, Matrix_iSym, allocVector(INTSXP, nout));
53 :     ai = INTEGER(GET_SLOT(ans, Matrix_iSym));
54 :     Memcpy(ai, INTEGER(islot), nod);
55 :     SET_SLOT(ans, Matrix_jSym, allocVector(INTSXP, nout));
56 :     aj = INTEGER(GET_SLOT(ans, Matrix_jSym));
57 :     SET_SLOT(ans, Matrix_xSym, allocVector(REALSXP, nout));
58 :     ax = REAL(GET_SLOT(ans, Matrix_xSym));
59 :     Memcpy(ax, REAL(GET_SLOT(x, Matrix_xSym)), nod);
60 :     for (j = 0; j < n; j++) {
61 :     int jj, npj = nod + j, p2 = p[j+1];
62 :     aj[npj] = ai[npj] = j;
63 :     ax[npj] = 1.;
64 :     for (jj = p[j]; jj < p2; jj++) aj[jj] = j;
65 :     }
66 :     UNPROTECT(1);
67 :     }
68 :     return ans;
69 :     }

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