Re: New User - Programming

• To: mathgroup at smc.vnet.net
• Subject: [mg52539] Re: [mg52507] New User - Programming
• From: yehuda ben-shimol <benshimo at bgu.ac.il>
• Date: Wed, 1 Dec 2004 05:58:07 -0500 (EST)
• References: <200411301024.FAA01340@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```Excellent example for  MapThread or Thread :)

a = {5, 6, 3, 2, 8, 2};

b = {5, 4, 1, 3, 9, 4};

f[x_, y_] := Which[x > y, 1, x < y, -1, True, 0]

and use MapThread in the following way

to get the result

{0, 1, 1, -1, -1, -1}

If you prefer the "pure functions" notation you may do it as
MapThread[Which[#1 > #2, 1, #1 < #2, -1, True, 0] &, {a, b}]
and get the same output.

With Thread you may do it as the following
to get the same result.
In general, for long vectors the Transpose is less recommended.
yehuda

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.
>
>
>a={5,6,3,2,8,2};
>b={5,4,1,3,9,4};
>c={a,b};
>
>p=0;
>
>Fun[t_,u_]/;t==u :=0;
>Fun[t_,u_]/;t>u:=1;
>Fun[t_,u_]/;t<u:=-1;
>
>signal=Map[ (Fun[#[[1]],#[[2]]])&,Transpose[c]];
>
>c4={signal};
>
>cumTotal=Flatten[Map[p+={Last[#]} &,Transpose[c4]]];
>
>
>TableForm[{a,b,signal,total},TableDirections->Row,
>    TableSpacing->{4,4,4,4,4}]
>
>
>a	b	Signal		Cum.Total
>
>5	5	0		0
>
>6	4	1		1
>
>3	1	1		2
>
>2	3	-1		1
>
>8	9	-1		0
>
>2	4	-1		-1
>
>
>
>
>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.
>
>Ideally, I am looking to modify my code, so it produces, signal =
>{0,1,0,-1,-1,0} and cumTotal = {0,1,1,0,-1,-1}.The maximum size of the
>cumulative total need not be 1, but rather any value that is chosen as
>a limit.
>
>This has been causing me a great deal of grief and I would greatly
>welcome any help and suggestions. Given my lack of experience, 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.
>
>Regards
>
>Dean Williams
>
>
>

```

• Prev by Date: Re: Re: Changing CellMargins?
• Next by Date: Re: launching a kernel on a remote linux machine through ssh from a linux machine
• Previous by thread: Re: New User - Programming
• Next by thread: Re: New User - Programming