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: New User - Programming

  • To: mathgroup at smc.vnet.net
  • Subject: [mg52532] Re: [mg52507] New User - Programming
  • From: Sseziwa Mukasa <mukasa at jeol.com>
  • Date: Wed, 1 Dec 2004 05:57:52 -0500 (EST)
  • References: <200411301024.FAA01340@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

On Nov 30, 2004, at 5:24 AM, Dean Williams wrote:

> I am a new user who is well and truly stuck. Any help would be greatly
> appreciated.
>
> I have two lists, a and b, that when compared, will produce a third
> list of signals. This third list is then summed to get a cumulative
> total of the signals.
>
> The rules are fairly simple. If a = b, the signal is 0, if a > b, the
> signal is 1 and finally, if a < b, then the signal is ?1.
>

An easier way to generate your signal is signal=Sign[a-b]

> cumTotal=Flatten[Map[p+={Last[#]} &,Transpose[c4]]];

Similarly FoldList[Plus,First[signal],Rest[signal]] will generate your 
cumulative sum.

> I want to modify slightly how the signal is generated. The rules are
> the same except that if the cumulative total is already 1 or -1, then
> no new signal is generated unless the new signal would make the
> cumulative total move back towards zero.

In this case it's probably easier to work in the other direction; 
compute the cumulative totals first then calculate the signal.  Using 
FoldList the cumulative signal can be computed with:

FoldList[Block[{s = Sign[#2[[
       1]] - #2[[2]]]}, If[Abs[#1 + s] > 1, #1, #1 + s]] &, 
Sign[First[a] -
         First[b]], Transpose[{Rest[a], Rest[b]}]]

The signal can of course be recovered from the pairwise differences

Drop[RotateLeft[cum] - cum, -1]

where cum are the cumulative totals.

> I am sure that there is a more efficient way to tackle this type of
> problem, especially as  I am dealing with many large lists.
>

The drawback to my suggestion is the formation of the temporary list 
Transpose[{Rest[a],Rest[b]}], if your lists are not too large that 
shouldn't be too significant a problem.  Otherwise you should use a Do 
or For loop.

Regards,

Ssezi


  • Prev by Date: Re: canonical mathematical expression represenation?
  • Next by Date: Re: pair sums applied to trignometry sums
  • Previous by thread: Re: use of orderless
  • Next by thread: Re: New User - Programming