Dear All, I wish to compute the SVD of a matrix M which represents n rows of observations of p column measurements. The p measurements are sampled from a 2 dimensional surface, such that meaningful "neighbourhood" relationships exists between the p measurement columns. p is too large to compute the covariance matrix directly (10,000 columns). However, by using neighbourhood information, many of the entries (i,j) in the covariance matrix can be "masked" to zero, (on the basis that points i and j lie too far from each other to be considered. I will call this binary mask matrix B. So now I have my original matrix M with n observations of p measurements, and a sparse binary mask matrix B, with sum(B==0)>>sum(B==1), and B[i,j]==0 indicates that the relationship between measurements i and j are considered uninteresting. I wish to compute the SVD of the covariance matrix t(M)%*%M, which is too large 10,000^2 entries. However only a small subset of these measurements are non-zero, after applying the mask B. I have tried to read the documentation accompanying the SparseM and Matrix packages which include sparse representations, but am stuck. Given the original matrix M, and a function areNeighbours(i,j) which returns true if the B[i,j]==1, can anyone furnish me with an example of how to do this? I would be extremely grateful With thanks, Oliver Lyttelton (Phd student) PS (I appreciate that I could compute the SVD of t(M) if n<<p but I actively wish to "blot out" the covariance information of unrelated pairs of measurements)