Skip to content
Prev 101485 / 398500 Next

shifting a huge matrix left or right efficiently ?

A little algebra up front can often help.

Note that

 	X <- shiftMatrixL(X, 1)*3 + shiftMatrixL(X,2)*5

(and similarly with more terms on the r.h.s)

is just

 	X <- X %*% mat

where mat is is a matrix of zeroes except that

 	mat[ i+1, i ] == 3
 	mat[ i+2, i ] == 5

and dim(mat) == dim(X).

So forget about explicitly shifting the matrix if you do this in native R 
- just construct a suitable version of mat and use '%*%'. If you must do

this in C shift coefficient vector implicitly using a pointer before 
finding the inner product with each row, and if the matrix is truly large 
follow Tony Plate's advice to transform X first (and look at Chapter 1 of 
Matrix Computations by Golub and Van Loan, 1996, if you need to know why).
On Mon, 9 Oct 2006, Huang-Wen Chen wrote:

            
Charles C. Berry                        (858) 534-2098
                                          Dept of Family/Preventive Medicine
E mailto:cberry at tajo.ucsd.edu	         UC San Diego
http://biostat.ucsd.edu/~cberry/         La Jolla, San Diego 92093-0717