[R] matrix cross product in R different from cross product in Matlab
Duncan Murdoch
murdoch.duncan at gmail.com
Sat May 8 23:40:20 CEST 2010
Susanne Schmidt wrote:
> Hi all,
>
> I have been searching all sorts of documentation, reference cards, cheat
> sheets but can't find why R's
> crossprod(A, B) which is identical to A%*%B
>
If you read the help page ?crossprod, you'll see it is supposed to be
identical to t(A) %*% B.
> does not produce the same as Matlabs
> cross(A, B)
> Supposedly both calculate the cross product, and say so, or where do I
> go wrong?
>
They are following different definitions for "cross product". The R
definition is the statistical one, e.g. what is described here:
http://stattrek.com/matrix-algebra/sums-of-squares.aspx . The one you
describe below is the one from 3 dimensional vector geometry. You can
get that one in R in a few different packages, but it's not really used
much in statistics, so it's not in base R. (It's called xprod in RFOC
and RSEIS, extprod3d in geometry.)
Duncan Murdoch
> R is only doing sums in the crossprod however, as indicated by
>
> (z <- crossprod(1:4)) # = sum(1 + 2^2 + 3^2 + 4^2)
> in
>
> http://127.0.0.1:13073/library/base/html/crossprod.html
>
> R's result of
> g <- rbind(c(1, 2, 3), c( 4, 5, 6))
> h <- rbind(c(4, 5, 6), c(1, 2, 3))
> c <- crossprod(g, h)
> is
>
> > c
> [,1] [,2] [,3]
> [1,] 8 13 18
> [2,] 13 20 27
> [3,] 18 27 36
>
> because there are only sums involved, however, I cant work out ALL of
> them for the 3D example, something like
> [,1] [,2] [,3]
> [1,] 1*4+4*1 ? ? # #sum
> of elementwise multiplication of first column of first matrix with first
> column of second matrix of second matrix
> [2,] ? 2*5+5*2 ?
> ? cant figure out how these were derived, definitely this is NOT
> identical to e.g. http://en.wikipedia.org/wiki/Cross_product
>
> I can work it out for the tcrossprod
> > c <- tcrossprod(g, h)
> > c
> [,1] [,2]
> [1,] 32 14
> [2,] 77 32
>
> because
> [,1] [,2]
> [1,] 1*4+2*5+3*6 1*1+2*2+3*3 #sum of elementwise multiplication
> of first line of first matrix with first line of second matrix sum of
> elementwise multiplication of first line of first matrix with second
> line of second matrix
> [2,] 4*4+5*5+6*6 4*1+5*2+6*3 #sum of elementwise multiplication
> of second line of first matrix with first line of second matrix sum of
> elementwise multiplication of second line of first matrix with second
> line of second matrix
>
>
> outer product is something completely different again , no need to show
> it here
>
>
> Matlab's result in contrast of
> g = [1 2 3 ; 4 5 6]
> h = [4 5 6; 1 2 3]
> c = cross(g,h)
>
> is
> c =
>
> -3 6 -3
> 3 -6 3
>
>
> which is in accordance to
> http://en.wikipedia.org/wiki/Cross_product
> and any math text book
>
> >> d = dot(g, h)
>
> d =
>
> 32 50 72
> which is of course something different again
>
> What exactly does crossprod mean in R? and why does R's cross product
> not do the same as indicated in references for cross products?
>
> base::crossprod
> doesnt tell me much:
> function (x, y = NULL)
> .Internal(crossprod(x, y))
> <environment: namespace:base>
>
> Where exactly do I look up the core of the function on Windows ? sorry,
> I HAVE been trying to find this for hours now
> Thanks in advance,
> Susanne
>
> ------------------------------------------------------------------------
>
> ______________________________________________
> R-help at r-project.org 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.
>
More information about the R-help
mailing list