Hi:
Another alternative is
crossprod(A)
which is meant to produce an optimized A'A (not the vector cross-product
from intro physics :)
Example:
A <- matrix(rpois(9, 10), ncol = 3)
> A
[,1] [,2] [,3]
[1,] 6 10 14
[2,] 7 5 16
[3,] 12 16 10
> t(A) %*% A
[,1] [,2] [,3]
[1,] 229 287 316
[2,] 287 381 380
[3,] 316 380 552
> crossprod(A)
[,1] [,2] [,3]
[1,] 229 287 316
[2,] 287 381 380
[3,] 316 380 552
A little test:
f <- function(A) {
U <- crossprod(A)
diag(U) <- 0
U
}
g <- function(A) {
U <- t(A) %*% A
diag(U) <- 0
U
}
# matrix multiplication on a 100 x 10 matrix
> system.time(replicate(1000, g(matrix(rpois(1000, 10), ncol = 10))))
user system elapsed
0.24 0.00 0.23
# crossprod
> system.time(replicate(1000, f(matrix(rpois(1000, 10), ncol = 10))))
user system elapsed
0.20 0.00 0.21
# matrix multiplication on a 10 x 100 matrix
> system.time(replicate(1000, g(matrix(rpois(1000, 10), ncol = 100))))
user system elapsed
1.72 0.17 1.89
# crossprod
> system.time(replicate(1000, f(matrix(rpois(1000, 10), ncol = 100))))
user system elapsed
0.47 0.09 0.56
HTH,
Dennis
On Thu, Nov 11, 2010 at 5:19 PM, Michael Bedward
<[email protected]>wrote:
> On 12 November 2010 02:21, David Winsemius <[email protected]> wrote:
> >
> >> The fastest and easiest solution is
> >>
> >> t(A) %*% A
> >
> > That is really elegant. (Wish I could remember my linear algebra lessons
> as
> > well from forty years ago.) I checked it against the specified output and
> > found that with one exception that the OP had planned for the diagonal to
> be
> > filled with zeroes. So that could be completed by a simple modification:
> >
> > temp <- t(A) %*% A
> > diag(temp) <- 0
> > temp
> >
>
> Excellent solution ! Small is beautiful :)
>
> Michael
>
> ______________________________________________
> [email protected] 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.
>
[[alternative HTML version deleted]]
______________________________________________
[email protected] 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.