RSiteSearch("cross product")
library(pracma)
?cross

Speed is usually desired in the context of many similar computations, and is normally achieved in R by vectorizing computation, so storing the large number of 3d vectors together in a structure like a Nx3 matrix so the code can be vectorized is the logical approach. The cross() function takes inputs in this form, but the current implementation (0.6-3) then fails to take advantage of that storage since it iterates with a for loop. A better core implementation of cross() might be:

vcrossp <- function( a, b ) {
  result <- matrix( NA, nrow( a ), 3 )
  result[,1] <- a[,2] * b[,3] - a[,3] * b[,2]
  result[,2] <- a[,3] * b[,1] - a[,1] * b[,3]
  result[,3] <- a[,1] * b[,2] - a[,2] * b[,1]
  result
}

which is about 20 times faster than cross() on my machine.

On 07/08/2011 05:52 AM, Eik Vettorazzi wrote:
Hi,
how about this:

mm<-cbind(V1,V2)
xy<-sapply(1:3,function(x)det(mm[-x,])*(2*(x%%2)-1))

#some checks
all.equal(0,as.vector(xy%*%V1))
all.equal(0,as.vector(xy%*%V2))


Am 08.07.2011 08:27, schrieb Bai:
Hi, everyone,

I need an efficient way to do vectors cross product in R.

Set vectors,
V1 = ai + bj + ck
V2 = di + ej + fk

then the cross product is
   V1 x V2    =  (bf - ce) i + (cd - af) j + (ae - bd) k


As shown here ( http://en.wikipedia.org/wiki/Cross_product ).

Thanks.

Best,
Bai

______________________________________________
R-help@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.

______________________________________________
R-help@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.

Reply via email to