Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2004
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Is a For loop always a no-no?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg50335] Re: [mg50312] Is a For loop always a no-no?
  • From: "David Annetts" <davidannetts at ihug.com.au>
  • Date: Fri, 27 Aug 2004 02:57:58 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Hi Rob,

I realize that many times some form of Mathematica built in array function
will
do the needed job.  Here I have a matrix containing individual data
traces in rows y[[i]]. I want to make matrix containing the corresponding
derivative signals in rows yd[[i]].  I get this done using the following
For loop. Matrix yd has been initialized (it wouldn't work with out it).

For[i = 1, i < n, i++, yd[[i]] = Drop[RotateLeft[y[[i]]] - y[[i]], -1]];

I tried the obvious (to me):
yd = Drop[RotateLeft[y] -y, -1];

But I get garbage.  It seems the whole matrix has been flattened to a
single list and the whole list is rotated --instead of doing it row
by row as I need.

Wizzards all: is there some slick way to do this without the For loop?
If so, it's probably faster and sure would look better in the code.
Suggestions appreciated as usual.

			-------------------
For[] (& Do[], While[], etc) loops have the advantage that they are usually
immediately understandable at a glance.  Translating C++ or Fortran into
Mathematica is usually straightforward if a For (or Do for the Fortran
buffs:) is used.

Mathematica's functional shorthand usually takes a bit more thought, but its
advantage (usually) is speed.

Try defining the function
der[x_List] := Drop[RotateLeft[x] - x, -1]

This is applied to your matrix using
Map[der, y]

Having said that, I get little speed difference between the functional
approach and the For[] loop IN THIS CASE.  I suspect this is because of the
RotateLeft[] function.  In this case, the advantage of the functional
approach is that I don't need to worry about defining "n"; I can just do it.

Regards,

Dave.


  • Prev by Date: Re: Q: Solve gives complex solution where there is a noncomplex solution how to get the last one?
  • Next by Date: Re: Is a For loop always a no-no?
  • Previous by thread: Re: Is a For loop always a no-no?
  • Next by thread: Re: Is a For loop always a no-no?