MathGroup Archive 1999

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

Search the Archive

Re: InputStream in version 3 vs version 4

Dear Ellis,

I'd like to give an addendum to my reply yesterday

>ELLIS, Luci schrieb:
>> Failing this, can anyone suggest a robust way to turn a list of functions
>> and a matrix of data into a matrix where the elements of each row are the
>> elements of the original matrix transformed by the corresponding function?
>> That is:
>> functions= {f[#]&, g[#]&, h[#]&}
>> data = {{data[1,1],data[1,2],data[1,3]},{data[2,1],data[2,2],data[2,3},
>> {data[3,1],data[3,2],data[3,3},
>> {data[4,1],data[4,2],data[4,3]},{data[5,1],data[5,2],data[5,3}}
>> {
>> output= {f[data[1,1]], g[data[1,2]], h[data[1,3]]}, {f[data[2,1]],
>> g[data[2,2]], h[data[2,3]]}, {f[data[3,1]], g[data[3,2]], h[data[3,3]]},
>> {f[data[4,1]], g[data[4,2]], h[data[4,3]]}, {f[data[5,1]], g[data[5,2]],
>> h[data[5,3]]},
>If we Map at level 0, we get our tool:
>In[1]:= Map[f,x,{0}]
>Out[1]= f[x]
>Operating on Lists of functions and arguments (generalisation of inner
>In[2]:= Inner[Map[#1,#2,{0}]&,{f,g,h},{1,2,3},List]
>Out[2]= {f[1],g[2],h[3]}
>So now we can Map that over your List (of argument records)
>In[3]:= funs={f,g,h};
>In[4]:= data=Array[dd,{5,3}]
>In[5]:= Inner[Map[#1,#2,{0}]&,funs,#,List]& /@ data

...this method only works, if your functions operates on a _single
argument_ in your data list. If you try to generalize (thinking of
f,g,.. being applied to {1,a}, {2,b},..), then

In[6]:= Inner[Map[#1,#2,{0}]&,{f,g,h},{{1,a},{2,b},{3,c}},List]
Out[6]= {{f[1],g[2],h[3]},{f[a],g[b],h[c]}}

you wouldn't get what you (sorry, for the fault it's me) intended:

WasNotOut[6]= {f[1,a],g[2,b],h[3,c]}

The reason is, that the use of List in the argument "sequences" {1,a},..
(and there you can't use Sequence either) comes across with the use of
List in Inner. So you have to give one of those a different name. One
choice would be:

In[10]:= Inner[Apply[#1,#2,{0}]&,{f,g,h},{s[1,a],s[2,b],s[3,c]},List]
Out[10]= {f[1,a],g[2,b],h[3,c]}

So you can achieve your goal with

In[30]:= data=Array[dd,{5,3,2}];
In[31]:= Module[{s},Inner[Apply[#1,#2,{0}]&,{f,g,h},#,List]&

(We use Module to have a Symbol without a value, ... it just disappears)

Kind regards, hw

  • Prev by Date: complex-valued expression not simplifying completely (was: ARghh!!)
  • Next by Date: Re: ARghh!!
  • Previous by thread: Re: InputStream in version 3 vs version 4
  • Next by thread: Re: InputStream in version 3 vs version 4