MathGroup Archive 2005

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

Search the Archive

Re: confusion about Thread[]


Torsten,

You want to use MapThread.

wLst = {w1, w2, w3};
zLst = {z1, z2, z3};
cLst = {c1, c2, c3};

MapThread[#1 && #2 || #1 && #3 || #2 && #3 & , 
  {wLst, zLst, cLst}]
{w1 && z1 || w1 && c1 || z1 && c1, 
  w2 && z2 || w2 && c2 || z2 && c2, 
  w3 && z3 || w3 && c3 || z3 && c3}

David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/ 



From: Torsten Coym [mailto:torsten.coym at eas.iis.fraunhofer.de]
To: mathgroup at smc.vnet.net

Hi group,

given three lists

wLst = {w1, w2, w3}
zLst = {z1, z2, z3}
cLst = {c1, c2, c3}

with each element representing a boolean value I want to calculate a 
list of the same function applied to the corresponding elements of wLst, 
zLst, cLst respectively. While the expression


Thread[Thread[wLst && zLst] || Thread[wLst && cLst] ||
    Thread[zLst && cLst]]


{(w1 && z1) || (w1 && c1) || (z1 && c1), (w2 && z2) || (w2 && c2) ||
    (z2 && c2), (w3 && z3) || (w3 && c3) || (z3 && c3)}

does exactly what I want, I wonder why the following approach using a 
pure function with three input arguments and a single call of Thread[] 
does not give the desired result:


Thread[((#1 && #2) || (#1 && #3) || (#2 && #3) & )[wLst, zLst, cLst]]

({w1, w2, w3} && {z1, z2, z3}) || ({w1, w2, w3} && {c1, c2, c3}) ||
   ({z1, z2, z3} && {c1, c2, c3})

although

((#1 && #2) || (#1 && #3) || (#2 && #3) & )[w1, z1, c1]

(w1 && z1) || (w1 && c1) || (z1 && c1)

implements the desired logical expression and


Thread[f[wLst, zLst, cLst]]

{f[w1, z1, c1], f[w2, z2, c2], f[w3, z3, c3]}

works the way I expect it.


It seems I am a bit disconnected here ...

Torsten





  • Prev by Date: Re: Output format
  • Next by Date: SSH Remote Kernel on Windows - Can it be done?
  • Previous by thread: Re: confusion about Thread[]
  • Next by thread: Re: confusion about Thread[]