performance of apply
Luke Tierney
luke@stat.umn.edu
Fri, 29 May 1998 10:45:53 -0500 (CDT)
Douglas Bates wrote:
>
> Andreas Weingessel <Andreas.Weingessel@ci.tuwien.ac.at> writes:
> >
> > To demonstrate it, I did some benchmarking for different methods of
> > computing the row sums of an nx10 matrix with n =3D 2000, ..., 10000.
> >
> > The first method (M1) I used is the normal apply command:
> > y <- apply(x,1,sum)
> > The second method (M2) uses a for-loop for the computations, where the
> > memory for the resulting vector has been allocated before. That is, for
> > n=3D2000:
> > z <- numeric(2000); for (i in 1:2000) z[i] <- sum(x[i,])
> > The third method (M3) also uses a for-loop, but the resulting vector
> > is built recursively, i.e.
> > z1 <- NULL; for (i in 1:2000) z1 <- c(z1,sum(x[i,]))
> >
> > All computations have been made on a Pentium II 233MHz, 256MB, R
> > started as R -v 50. The following table shows the minimum, mean, and
> > maximum CPU-time in seconds as measured by system.time over 10 runs
> > for every computation for different values of n.
> >
> > n M1 M2 M3
> > 2000 4.03 4.16 4.34 0.27 0.40 0.47 0.51 0.63 0.71
> > 4000 12.65 13.40 14.68 0.73 0.81 0.94 1.78 1.86 1.98
> > 6000 26.51 28.14 29.50 1.19 1.22 1.38 3.79 3.80 3.80
> > 8000 52.06 63.43 67.61 1.46 1.63 1.69 6.38 6.41 6.58
> > 10000 84.06 98.17 118.94 1.93 2.01 2.13 9.78 9.79 9.81
> >
> > That is, the computation of the sums of the rows of a 10000x10 matrix
> > with apply takes about 100sec on average, where a simple for-loop does
> > the same job in about 2sec.
It looks like M1 and M3 are O(n^2) but M1 is O(n). I see where that
comes from in M3, but it surprises me for M1.
luke
--
Luke Tierney
University of Minnesota Phone: 612-625-7843
School of Statistics Fax: 612-624-8868
206 Church Street email: luke@stat.umn.edu
Minneapolis, MN 55455 USA WWW: http://www.stat.umn.edu
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._