From bates at stat.wisc.edu  Wed Nov 29 18:19:52 2006
From: bates at stat.wisc.edu (Douglas Bates)
Date: Wed, 29 Nov 2006 11:19:52 -0600
Subject: [Rd] Matrix*vector: coercing sparse to dense matrix for
	arithmetic
In-Reply-To: <20061129153309.GA6836@pu100877.student.princeton.edu>
References: <20061129153309.GA6836@pu100877.student.princeton.edu>
Message-ID: <40e66e0b0611290919n57ae56d6rd568575179f93b8f@mail.gmail.com>

On 11/29/06, Tamas K Papp <tpapp at princeton.edu> wrote:

> I have a sparse Matrix (kronecker product of spline design matrices),
> and I need to multiply each row by a number to get another matrix.  If
> the matrix is A and the numbers are stored in a vector k, with plain
> vanilla matrices I would do

> A*k

> But when using the Matrix package (class of A is "dgCMatrix"), I get
> the warning "coercing sparse to dense matrix for arithmetic".  The
> error message is perfectly reasonable, I am looking for a way to do it
> right (keeping operations in the realm of sparse matrices).  Any help
> would be appreciated.

I would suggest premultiplying by a diagonal matrix.  However, when I
look at the method dispatch after an example it doesn't appear to be
making a good choice.  What I think should work well (and Martin or I
will make the necessary changes to ensure that it does) is

library(Matrix)
data(KNex); mm <- KNex$mm
system.time(Diagonal(x = rnorm(nrow(mm))) %*% mm)



[Rd] Matrix*vector: coercing sparse to dense matrix for arithmetic
Douglas Bates