Message-ID: <CADFF1A1-E786-4DE2-B3A6-91A67D96ABC5@comcast.net>
Date: 2009-02-20T13:35:16Z
From: David Winsemius
Subject: Matrix package: band matrix
In-Reply-To: <Pine.LNX.4.43.0902190228250.19917@hymn32.u.washington.edu>
If you can tolerate the subdiagonal and superdiagonal zero elements
being populated, then perhaps this is useful. If there is a subset
function as you suggest, then perhaps further reduction would be
feasible from this as a starting point. At least it would reduce the
size from 10^5 x 10^5 to 10^5 x 3:
library(Matrix)
xxx <- data.frame(x1 =1:5, y1=c(0,6,0,7,0) )
M= Matrix(0,5,5)
M[row(M) == col(M)] <- xxx$x1
M[row(M)-1 == col(M)] <- xxx$y1[1:(length(xxx$y1)-1)]
M[row(M) == col(M)-1] <- xxx$y1[1:(length(xxx$y1)-1)]
> M
5 x 5 sparse Matrix of class "dgCMatrix"
[1,] 1 6 . . .
[2,] 6 2 7 . .
[3,] . 7 3 8 .
[4,] . . 8 4 9
[5,] . . . 9 5
--
David Winsemius
On Feb 19, 2009, at 5:28 AM, Thomas Lumley wrote:
>
> I want to construct a symmetric band matrix in the Matrix package
> from a matrix where the first column contains data for the main
> diagonal, the second column has data for the first subdiagonal/
> superdiagonal and so on.
>
> Since the Matrix will be 10^5 x 10^5 or so, with perhaps 10-20 non-
> zero elements above the diagonal per row, I can't do it by
> constructing a full matrix and then using the band() function to
> subset it to a band matrix.
>
> Any suggestions?
>
> -thomas
>
> Thomas Lumley Assoc. Professor, Biostatistics
> tlumley at u.washington.edu University of Washington, Seattle
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.