MathGroup Archive 2009

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

Search the Archive

Re: slots with 2 indexed array?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg95612] Re: slots with 2 indexed array?
  • From: Bill Rowe <readnews at sbcglobal.net>
  • Date: Thu, 22 Jan 2009 07:04:57 -0500 (EST)

On 1/21/09 at 6:47 AM, wb at wavebounce.com wrote:

>First I produce some dummy data, 4000 of what I call signals, 1024
>samples each.

>sigs = Table[10 i + j, {i, 4000}, {j, 1024}]; len = Length[sigs];

>I'd like to modify these signals. The For statement below works. I
>can use a slot function on each of the sigs specified by i.

>For[i = 1, i < len + 1, i++, sigs[[i]] = If[# >= 2048, # -
>2048, # + 2048] & /@ sigs[[i]] ]

While the loop above clearly works, it is a very inefficient way
to get the desired result. It is more efficient to do

sigs = Map[If[# >= 2048, # - 2048, # + 2048] &, sigs, {2}];

That is:

In[1]:= test = sigs = Table[10 i + j, {i, 4000}, {j, 1024}]; len =
  Length[sigs];

In[2]:=
=46or[i = 1, i < len + 1, i++,
   sigs[[i]] =
    If[# >= 2048, # - 2048, # + 2048] & /@ sigs[[i]]] // Timing

Out[2]= {1.35373,Null}

In[3]:=
test = Map[If[# >= 2048, # - 2048, # + 2048] &, test, {2}]; // Timing

Out[3]= {0.859782,Null}

In[4]:= test == sigs

Out[4]= True

>Surely there's a way to use slots on a double indexed array but I
>haven't found it yet.

>If I try to let # represent every entry in sigs, the If statement
>isn't processed:

>sigs = If[# >= 2048, # - 2048, # + 2048] & /@ sigs;

Of course the reason this doesn't work is the slot is replaced
by an entire row in sigs rather than an individual element. You
can make the if function map to individual elements by using the
third argument to Map as I did above.



  • Prev by Date: Re: Re: Re: Which editor do you use for math
  • Next by Date: Re: Re: Which editor do you use for math articles
  • Previous by thread: Re: slots with 2 indexed array?
  • Next by thread: Re: slots with 2 indexed array?