SCM

SCM Repository

[matrix] Annotation of /pkg/TODO
ViewVC logotype

Annotation of /pkg/TODO

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2103 - (view) (download)

1 : bates 1236 Check for DimNames propagation in coercion and other operations.
2 : bates 984 ------
3 : bates 344 - Report the problem in the Linux ldexp manual page. The second and
4 :     third calls in the Synopsis should be to ldexpf and ldexpl.
5 : maechler 472
6 : maechler 868 - [,] indexing: for sparse "works", but not yet for negative indices!
7 : maechler 472
8 : bates 536 - consider moving alloc3Darray from ./src/Mutils.c to
9 : maechler 538 $(RSRC)/src/base/array.c
10 : bates 1578 ------
11 : maechler 634 - provide methods for "dspMatrix" and "dppMatrix"!
12 :    
13 : maechler 538 - implement (more) methods for supporting "packed" (symmetric / triangular)
14 : maechler 634 matrices; particularly something like pack() and unpack() [to/from our
15 :     classes from/to "numeric"] --- have already man/unpack.Rd but no method yet!
16 : maechler 538
17 : maechler 834 (have some dtr* <-> dtp*)
18 :    
19 : bates 1578 -----
20 : bates 645
21 :     - combine the C functions for multiplication by special forms and
22 :     solution wrt special forms by using a 'right' argument and a
23 :     'classed' argument.
24 : maechler 675 [done with dgeMatrix_matrix_mm(); not yet for other classes;
25 :     and for _crossprod()]
26 :    
27 :     - add more comprehensive examples / tests for Schur decomposition
28 : maechler 696
29 :     - arithmetic for sparse matrices:
30 : maechler 935 <sparseMatrix> o <same-dim-sparseMatrix>
31 : maechler 696 should return a sparse matrix for at least "+" and "*" , also %%,
32 :     and "/" and "%/%" at least when the RHS is non-zero a scalar.
33 : maechler 935 Challenge: nice implementation (``common non-0''; but Tsparse* is not uniq).
34 : maechler 696
35 : bates 1578 -----
36 : bates 712
37 : maechler 935 - "Math2" , "Math", "Arith":
38 :     keep triangular and symmetric Matrices when appropriate:
39 :     particularly desirable for "Math2": round(), signif()
40 : maechler 956
41 :     - "d" <-> "l" coercion for all "[TCR]" sparse matrices is really trivial:
42 :     "d" -> "l" : drops the 'x' slot
43 :     "l" -> "d" : construct an 'x' slot of all '1'
44 :     We currently have many of these conversions explicitly, e.g.
45 :     setAs("dsTMatrix", "lsTMatrix",
46 :     function(from) new("lsTMatrix", i = from@i, j = from@j, uplo = from@uplo,
47 :     Dim = from@Dim, Dimnames = from@Dimnames))
48 :     but I would rather want to automatically construct all these coercion
49 :     methods at once by a ``method constructor'', i.e.,
50 :     for all "dsparse*" -> "lsparse*" and vice versa.
51 :     How can one do this {in a documented way} ?
52 : maechler 1087
53 : maechler 2048 - Think of constructing setAs(...) calls automatically in order to
54 :     basically enable all ``sensible'' as(fromMatrix, toMatrix) calls,
55 :     possibly using canCoerce(.)
56 :    
57 :     - setAs(<Mcl>, "[dln]Matrix") for <Mcl> in {Matrix or denseMatrix + sparseMatrix}
58 :    
59 :     - When we have a packed matrix, it's a waste to go through "full" to "sparse":
60 :     ==> implement
61 :     setAs("dspMatrix", "sparseMatrix")
62 :     setAs("dppMatrix", "sparseMatrix")
63 :     setAs("dtpMatrix", "sparseMatrix")
64 :     and the same for "lsp" , "ltp" and "nsp" , "ntp" !
65 :    
66 : maechler 1097 - tcrossprod(x, y) : do provide methods for y != NULL
67 :     calling Lapack's DGEMM for "dense"
68 : maechler 1109 [2005-12-xx: done for dgeMatrix at least]
69 :    
70 : maechler 1201 - BUGlet: Shouldn't lose factorization here:
71 :     h6 <- Hilbert(6); chol(h6) ; str(h6) # has factor
72 :     str(H6 <- as(h6, "dspMatrix")) # has lost factor
73 :     ## and the same in a similar situation involving "dpo", "dpp"
74 : maechler 1226
75 : maechler 1245 - Things like M[upper.tri(M)] are not really most useful for sparse
76 :     matrices. --> provide generic functions
77 :     upperTriMatrix(), lowerTriMatrix() both with argument 'diag = TRUE'
78 :     (which can be set to FALSE of course) which are used to extract a
79 :     triangle from an arbitrary sparse matrix and return a "dtCMatrix".
80 :    
81 : maechler 1592 - Factorizations: LU done; also Schur() for *sparse* Matrices.
82 : maechler 1253
83 : maechler 1655 - band(), triu(), tril() for *all* including "matrix", not just sparse matrices
84 : maechler 1575
85 :     - is.na() method for all our matrices [ ==> which(*, arr.ind=TRUE) might work ]
86 : maechler 1592
87 : maechler 1619 - use .Call(Csparse_drop, M, tol) in more places,
88 :     both with 'tol = 0.' to drop "values that happen to be 0" and for
89 :     zapsmall() methods for Csparse*
90 : maechler 1654
91 :     - implement .Call(Csparse_scale, ....) interfacing to cholmod_scale()
92 :     in src/CHOLMOD/Include/cholmod_matrixops.h : for another function
93 :     specifically for multiplying a cholmod_sparse object by a diagonal matrix.
94 :     Use it in %*% and [t]crossprod methods.
95 :    
96 :     - chol() and determinant() should ``work'': proper result or "good" error
97 :     message.
98 : maechler 1659
99 : maechler 1714 - make sure *all* group methods have (maybe "bail-out") setMethod for "Matrix".
100 :     e.g. zapsmall(<pMatrix>) fails "badly"
101 : maechler 1725
102 :     - speedup: pass class definition to non0ind() [check all calls ..]
103 : maechler 1738
104 :     - sum(): implement methods which work for *all* our matrices.
105 :    
106 :     - Implement expand(.) for the Cholesky() results
107 :     "dCHMsimpl" and "dCHMsuper" -- currently have no *decent* way to get at
108 :     the matrix factors of the corresponding matrix factorization !!
109 :    
110 : maechler 1771 - rbind(<sparse>, <dense>) does not work (e.g. <dgC>, <dge>)
111 : maechler 1799
112 :     - make sure M[FALSE, FALSE] works for all Matrices
113 :     {e.g. fails for M <- Diagonal(4)}
114 : maechler 1833
115 :     - <sparse> %*% <dense> {also in crossprod/tcrossprod} currently always
116 :     returns <dense>, since --> Csparse_dense_prod --> cholmod_sdmult
117 :     and that does only return dense.
118 :     When the sparse matrix is very sparse, i.e. has many rows with only zero
119 :     entries, it would make much sense to return sparse.
120 :    
121 :     - sparse-symmetric + diagonal should stay sparse-symmetric
122 :     (only stays sparse): Matrix(0, 4, 4) + Diagonal(4, 1:4)
123 : maechler 1845 --> R/diagMatrix.R ('FIXME')
124 :     but also R/Ops.R to ensure sp-sym. + sp-sym. |-> sp-sym. etc
125 : maechler 1833
126 : maechler 2048 - Diagonal(n) %*% A --- too slow!! --> ~/R/MM/Pkg-ex/Matrix/diag-Tamas-ex.R
127 :    
128 : maechler 1833 - For a square sparse matrix 'b' {typically dgCMatrix or dgTMatrix},
129 :     we'd want a function "Mat_plus_t_Mat" <- function(b) {....}
130 :     which computes the symmetric sparse matrix b + t(b)
131 :     in way that never works with size-doubled vectors from b@i etc..
132 :    
133 :     - ! <symmetricMatrix> loses symmetry, both for dense and sparse matrices.
134 :     !M where M is "sparseMatrix", currently always gives dense. This only
135 :     makes sense when M is ``really sparse''.
136 : maechler 1855
137 : maechler 2005 - msy <- as(matrix(c(2:1,1:2),2), "dsyMatrix"); str(msy)
138 :    
139 :     shows that the Cholesky factorization is computed ``too quickly''.
140 :     Can be a big pain for largish matrices, when it is unneeded.
141 :    
142 : maechler 2018 - example(Cholesky, echo=FALSE) ; cm <- chol(mtm); str(cm); str(mtm)
143 :    
144 :     shows that chol() does not seems to make use of an already
145 :     present factorization and rather uses one with more '0' in x slot.
146 :    
147 : maechler 2005 - diag(m) <- val currently automatically works via m[cbind(i,i)] <- val
148 :     However,
149 :     we need methods for 'diag<-' at least for diagonalMatrix,
150 :     triangularMatrix, and probably also "dense*general*Matrix" since the
151 :     above currently goes via "matrix" and back instead of using the 'x' slot
152 :     directly.
153 : maechler 2043
154 : maechler 2048 - image(M, ..): Think about an optional smart option which keeps
155 :     "0 |-> transparent" and allows colors to differentiate negative and
156 :     positive entries.
157 : maechler 2043
158 :     - examples for solve( Cholesky(.), b, system = c("A", "LDLt"....))
159 :     probably rather in man/CHMfactor-class.Rd than man/Cholesky.Rd
160 : maechler 2072
161 :     - (A + tr(A))/2 := the symmetric part of A, is needed in several
162 :     circumstances; unfortunately it's not "smart" (preserving symmetry, ...)
163 :     --> define a generic and methods for it!
164 :     Names: symPart(A) or symMat(A) or symmetrize(A) or ... ?
165 : maechler 2102 Googling around I found that Nick Higham has a GPL contributed Matlab
166 : maechler 2072 toolbox where he uses symmpart(A) := (A + A') /. 2
167 :     {and skewpart(A) := (A - A') /. 2}
168 :    
169 :     - tr(A %*% B) {and even tr(A %*% B %*% C) ...} are also needed
170 :     frequently in some computations {conditional normal distr. ...}.
171 :     Since this can be done faster than by
172 :     sum(diag(A %*% B)) even for traditional matrices, e.g.
173 :     sum(A * t(B)) or {even faster for "full" mat}
174 :     crossprod(as.vector(A), as.vector(B))
175 :     and even more so for, e.g. <sparse> %*% <dense>
176 :     {used in Soeren's 'gR' computations},
177 :     we should also provide a generic and methods.
178 : maechler 2103
179 :     - qr.R(qr(x)) may differ for the "same" matrix, depending on it being
180 :     sparse or dense:
181 :     "qr.R(<sparse>) may differ from qr.R(<dense>) because of permutations"
182 :    
183 :     This is not really acceptable and currently influences rcond() as well.

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