SCM

SCM Repository

[matrix] Diff of /pkg/TODO
ViewVC logotype

Diff of /pkg/TODO

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

revision 510, Fri Feb 4 23:36:17 2005 UTC revision 2203, Sat Jun 14 20:09:17 2008 UTC
# Line 1  Line 1 
1    - Check for DimNames propagation in coercion and other operations.
2    
3  - Report the problem in the Linux ldexp manual page.  The second and  - Report the problem in the Linux ldexp manual page.  The second and
4    third calls in the Synopsis should be to ldexpf and ldexpl.    third calls in the Synopsis should be to ldexpf and ldexpl.
5    
6  - [,] indexing  - provide methods for "dspMatrix" and "dppMatrix"!
   
 - group generics: "Arith", but also "Ops" and "Math";  see  
   ?Math.data.frame  and the examples in  
   ?SetGeneric  
   
 - check to see if the .onLoad function to require the methods package  
   (in the AllClass.R file) is needed  
   
 - Should the uplo and diag slots continue to be stored as character?  
   An alternative is to use a factor as in the enum values for the  
   cblas.  
   
 - Organization of the source code files - right now they are organized  
   according to class (e.g. dgeMatrix.R, dgeMatrix.h, dgeMatrix.c).  Is  
   there a better way?  
   
 - Fix the calculation of the Dim slot for the crossprod method for  
   dgCMatrix objects (too tired to do that now).  
   
 - bCrosstab(): do we really want the diagonal "V:V" crosstabs?  
   
 - src/Metis/ : some Makefile needs fixing, as changing src/Metis/*.c  
              does not lead to recompilation.  
   
 - man/Matrix.Rd :  has example with dimnames, but we just drop them!  
                 MM thinks dimnames should be supported (but then ...)  
7    
8  - data/ : names 'mm' and even more 'y' are  ``too short''.  - implement (more) methods for supporting "packed" (symmetric / triangular)
9          If we really want to keep them, don't use "LazyData"    matrices; particularly something like pack() and unpack()  [to/from our
10          (such that one needs  data(*) explicitly);    classes from/to "numeric"] --- have already man/unpack.Rd but no method yet!
11          But MM would rather want something like  ex.mm and ex.y  
12      (have some dtr* <-> dtp*)
13    
14    - combine the C functions for multiplication by special forms and
15      solution wrt special forms by using a 'right' argument and a
16      'classed' argument.
17       [done with dgeMatrix_matrix_mm();  not yet for other classes;
18        and for _crossprod()]
19    
20    -----
21    
22    - "Math2" , "Math", "Arith":
23       keep triangular and symmetric Matrices when appropriate:
24       particularly desirable for  "Math2": round(), signif()
25    
26      For triangular matrices, more specifically make sure the four rules of
27      "triangular matrix algebra" (Golub+Van Loan 1996, 3.1.8, p.93) are
28      fulfilled; now(2008-03-06) ok for Csparse; not yet for <dtr> %*% <dtr>
29    
30    - "d" <-> "l" coercion for all "[TCR]" sparse matrices is really trivial:
31      "d" -> "l" : drops the 'x' slot
32      "l" -> "d" : construct an 'x' slot of all '1'
33      We currently have many of these conversions explicitly, e.g.
34       setAs("dsTMatrix", "lsTMatrix",
35          function(from) new("lsTMatrix", i = from@i, j = from@j, uplo = from@uplo,
36                             Dim = from@Dim, Dimnames = from@Dimnames))
37      but I would rather want to automatically construct all these coercion
38      methods at once by a ``method constructor'', i.e.,
39      for all  "dsparse*" -> "lsparse*" and vice versa.
40      How can one do this {in a documented way} ?
41    
42    - Think of constructing  setAs(...) calls automatically in order to
43      basically enable all ``sensible'' as(fromMatrix, toMatrix)  calls,
44      possibly using canCoerce(.)
45    
46    - setAs(<Mcl>,  "[dln]Matrix") for <Mcl> in {Matrix or denseMatrix + sparseMatrix}
47    
48    - When we have a packed matrix, it's a waste to go through "full" to "sparse":
49      ==> implement
50            setAs("dspMatrix", "sparseMatrix")
51            setAs("dppMatrix", "sparseMatrix")
52            setAs("dtpMatrix", "sparseMatrix")
53      and the same for "lsp" , "ltp"  and  "nsp" , "ntp" !
54    
55    - tcrossprod(x, y) : do provide methods for y != NULL
56      calling Lapack's DGEMM for "dense"
57      [2005-12-xx: done for dgeMatrix at least]
58    
59    - BUGlet:  Shouldn't lose factorization here:
60      h6 <- Hilbert(6); chol(h6) ; str(h6) # has factor
61      str(H6 <- as(h6, "dspMatrix"))       # has lost factor
62      ## and the same in a similar situation involving  "dpo", "dpp"
63    
64    - Factorizations: LU done; also Schur()  for  *sparse*  Matrices.
65    
66    - is.na() method for all our matrices [ ==> which(*, arr.ind=TRUE) might work ]
67    
68    - use  .Call(Csparse_drop, M, tol) in more places,
69      both with 'tol = 0.' to drop "values that happen to be 0" and for
70      zapsmall() methods for Csparse*
71    
72    - implement .Call(Csparse_scale, ....) interfacing to cholmod_scale()
73      in src/CHOLMOD/Include/cholmod_matrixops.h : for another function
74      specifically for multiplying a cholmod_sparse object by a diagonal matrix.
75      Use it in %*% and [t]crossprod methods.
76    
77    - chol() should ``work'': proper result or "good" error message.
78    
79    - make sure *all* group methods have (maybe "bail-out") setMethod for "Matrix".
80      e.g. zapsmall(<pMatrix>) fails "badly"
81    
82    - Implement  expand(.) for the Cholesky() results
83      "dCHMsimpl" and  "dCHMsuper"  -- currently have no *decent* way to get at
84      the matrix factors of the corresponding matrix factorization !!
85    
86    - rbind2(<sparse>, <dense>) does not work  (e.g. <dgC>, <dge>)
87    
88    - <sparse> %*% <dense>  {also in crossprod/tcrossprod}  currently always
89      returns <dense>, since --> Csparse_dense_prod --> cholmod_sdmult
90      and that does only return dense.
91      When the sparse matrix is very sparse, i.e. has many rows with only zero
92      entries, it would make much sense to return sparse.
93    
94    - sparse-symmetric + diagonal should stay sparse-symmetric
95      (only stays sparse): Matrix(0, 4, 4) + Diagonal(4, 1:4)
96      --> R/diagMatrix.R ('FIXME')
97      but also R/Ops.R  to ensure  sp-sym. + sp-sym. |-> sp-sym.  etc
98    
99    - ! <symmetricMatrix>  loses symmetry, both for dense and sparse matrices.
100      !M  where M is "sparseMatrix", currently always gives dense. This only
101      makes sense when M is ``really sparse''.
102    
103    - example(Cholesky, echo=FALSE) ; cm <- chol(mtm); str(cm); str(mtm)
104    
105      shows that chol() does not seems to make use of an already
106      present factorization and rather uses one with more '0' in x slot.
107    
108    - diag(m) <- val    currently automatically works via  m[cbind(i,i)] <- val
109      This (`[<-` method) is now "smart" for diagonalMatrix, but needs also to
110      be for triangularMatrix, and probably also "dense*general*Matrix" since the
111      above currently goes via "matrix" and back instead of using the 'x' slot
112      directly; in particular, the triangular* "class property" is lost!
113    
114    - examples for solve( Cholesky(.), b, system = c("A", "LDLt"....))
115      probably rather in man/CHMfactor-class.Rd than man/Cholesky.Rd
116    
117    - LDL(<CHMsimpl>) looks relatively easy; via  "tCsparse_diag()"
118       {diagonal entries of *triangular* Csparse}
119      --> see comment in determinant(<dsC>) in R/dsCMatrix.R, will give
120      faster determinant
121    
122    - tr(A %*% B) {and even  tr(A %*% B %*% C) ...} are also needed
123      frequently in some computations {conditional normal distr. ...}.
124      Since this can be done faster than by
125        sum(diag(A %*% B))  even for traditional matrices, e.g.
126                   sum(A * t(B)) or {even faster for "full" mat}
127                   crossprod(as.vector(A), as.vector(B))
128      and even more so for, e.g.  <sparse> %*% <dense>
129      {used in Soeren's 'gR' computations},
130      we should also provide a generic and methods.
131    
132    - qr.R(qr(x)) may differ for the "same" matrix, depending on it being
133      sparse or dense:
134        "qr.R(<sparse>) may differ from qr.R(<dense>) because of permutations"
135    
136      This is not really acceptable and currently influences  rcond() as well.
137    
138    - eigen() should become generic, and get a method at least for diagonal,
139      but also for symmetric -> dsyMatrix  [LAPACK dsyev() uses UPLO !],
140      but also simply for dgeMatrix (without going via tradition matrices).
141      What about Sparse?  There's fill-in, but it may still be sensible, e.g.
142      mlist <- list(1, 2:3, diag(x=5:3), 27, cbind(1,3:6), 100:101)
143      ee <- eigen(tcrossprod(bdiag(lapply(mlist, as.matrix))))
144      Matrix( signif(ee$vectors, 3) )
145    
146    - facmul() has no single method defined;  it looks like a good idea though
147      (instead of the infamous qr.qy, qr.qty,.... functions)
148    
149    - symmpart() and skewpart()  for *sparse* matrices still use (x +/- t(x))/2
150      and could be made more efficient.
151      Consider going via  asTuniq() or something very close to
152      .Arith.Csparse() in R/Ops.R
153    
154    - many setAs(*, "[dl]..Matrix") are still needed, as long as e.g.
155      replCmat() uses as_CspClass() and drop0(.) which itself call
156      as_CspClass() quite a bit.  --> try to replace these by
157      as(*, "CsparseMatrix"); forceSymmetric, etc.
158    
159    - implement fast diag(<triangularCsparse>) via calling new
160      src/Csparse.c's diag_tC_ptr()
161    
162    - add examples (and tests!) for update(<CHMfactor>, ..) and
163      Cholesky(......, Imult), also tests for hidden {hence no examples}
164      ldetL2up() { R/CHMfactor.R }
165    
166    - chol(<nsCMatrix>)  gives "temporarily disabled"
167      but should give the *symbolic* factorization;
168      similarly Cholesky(.) is not enabled
169    
170    - writeMM(obj, file=stdout()) creates file "1" since file is silently
171      assumed to be a string, i.e. cannot be a connection.
172      An R (instead of C) version should be pretty simple, and would work with
173      connections automatically ["lsparse" become either "real" or
174      "pattern", "depending if they have NAs or not].
175    
176    - <diagMatrix> o <ddenseMatrix> currently works via sparse, but
177      should return <diagMatrix> in the same cases where
178      <diagMatrix> o <numeric> does.
179    
180    - coercing sparse to dense when the denseMatrix is too large
181      (length(@ x) > .Machine$integer.max), should give better error
182      messages; e.g. Lrg == Lrg or  !Lrg  (in tests/indexing.R )

Legend:
Removed from v.510  
changed lines
  Added in v.2203

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