I am rusty on 'Matrix', but I see there are crossprod methods for those classes.
res <- crossprod( x , x ) gives your result up to scale factors of sqrt(res[i,i]*res[j,j]), so something like diagnl <- Diagonal( ncol(x), sqrt( diag( res ) ) final.res <- diagnl %*% res %*% diagnl should do it. On Tue, 23 Jan 2007, Jose Quesada wrote: > (Extremely sorry, disregard previous email as I hit send before pasting the > latest version of the example; this one is smaller too) > Dear R users, > > I want to apply a function that takes two vectors as input to all pairs > (combinations (nrow(X), 2))of matrix rows in a matrix. > I know that ideally, one should avoid loops in R, but after reading the docs > for > do.call, apply, etc, I still don't know how to write the nested loop in a > vectorized way. > > Example data: > x = matrix(rnorm(100), 10, 10) > # this is actually a very large sparse matrix, but it doesn't matter for the > # example > library(Matrix) > x = as(x,"CsparseMatrix") > > # cosine function > cosine = function (x, y){ > if (is.vector(x) && is.vector(y)) { > return(crossprod(x, y)/sqrt(crossprod(x) * crossprod(y))) > } else {stop("cosine: argument mismatch. Two vectors needed as input.")} > } > > # The loop-based solution I have is: > if (is(x, "Matrix") ) { > cos = array(NA, c(ncol(x), ncol(x))) > for (i in 2:ncol(x)) { > for (j in 1:(i - 1)) { > cos[i, j] = cosine(x[, i], x[, j]) > } > } > } > > This solution seems inneficient. Is there an easy way of achieving this with a > clever do.call + apply combination? > > Also, I have noticed that getting a row from a Matrix object produces a normal > array (i.e., it does not inherit Matrix class). However, selecting >1 rows, > does > produce a same-class matrix. If I convert with as() the output of selecting > one > row, am I losing performance? Is there any way to make the resulting vector > be a > 1-D Matrix object? > This solution seems inneficient. Is there an easy way of achieving this with a > clever do.call + apply combination? > -- > Thanks in advance, > -Jose > > -- > Jose Quesada, PhD > Research fellow, Psychology Dept. > Sussex University, Brighton, UK > http://www.andrew.cmu.edu/~jquesada > > ______________________________________________ > R-help@stat.math.ethz.ch 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. > Charles C. Berry (858) 534-2098 Dept of Family/Preventive Medicine E mailto:[EMAIL PROTECTED] UC San Diego http://biostat.ucsd.edu/~cberry/ La Jolla, San Diego 92093-0901 ______________________________________________ R-help@stat.math.ethz.ch 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.