# [R] Matrix package: band matrix

David Winsemius dwinsemius at comcast.net
Fri Feb 20 15:45:18 CET 2009

```Then? :

xxx <- data.frame(x1 =rnorm(5), offd= c(1:4,0) )
M <-Matrix(0,5,5)
rrr <- dim(M)
for (rr in 1:rrr){ M[rr,rr] <- xxx\$x1[rr] }
for (rr in 1:(rrr-1)){ M[rr+1,rr] <- xxx\$offd[rr] ; M[rr,rr+1] <- xxx
\$offd[rr]}

> M
5 x 5 sparse Matrix of class "dgCMatrix"

[1,] -1.494930  1.0000000 .         .          .
[2,]  1.000000 -0.6439328 2.000000  .          .
[3,]  .         2.0000000 1.428798  3.0000000  .
[4,]  .         .         3.000000 -0.3874097  4.00000000
[5,]  .         .         .         4.0000000 -0.07082702

David Winsemius
On Feb 20, 2009, at 8:49 AM, Thomas Lumley wrote:

> On Fri, 20 Feb 2009, David Winsemius wrote:
>
>> 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)]
>
> That provides the right structure, but row(M) and col(M) are dense
> matrices with 10^10 elements, so it still uses too much memory.
>
>      -thomas
>
> Thomas Lumley			Assoc. Professor, Biostatistics
> tlumley at u.washington.edu	University of Washington, Seattle
>
>

```