Re: Threading over matrices

*To*: mathgroup at smc.vnet.net*Subject*: [mg90768] Re: Threading over matrices*From*: "David Park" <djmpark at comcast.net>*Date*: Wed, 23 Jul 2008 05:59:21 -0400 (EDT)*References*: <g64487$djo$1@smc.vnet.net>

x = Table[Random[], {3}, {4}]; y = Table[Random[], {3}, {4}]; a = 0.5; You need to get the Listable Attribute for your functions. Less is not Listable, so let's define our own Less that is. SetAttributes[MyLess, Listable] MyLess[p_, q_] := p < q x~MyLess~y And for the other two functions: SetAttributes[f1, Listable] f1[x_, y_] := If[x < y, 1/x, x - y] x~f1~y SetAttributes[f2, Listable] f2[x_, y_] := Piecewise[{{1, x == a}, {x^2, x > a}}, x y^2] x~f2~y -- David Park djmpark at comcast.net http://home.comcast.net/~djmpark/ <"Robert <"@frank-exchange-of-views.oucs.ox.ac.uk> wrote in message news:g64487$djo$1 at smc.vnet.net... > How can I get evaluations to thread over matrices with > conditional functions? > Here's examples that show the behaviour that's really > frustrating me. > Create a couple of matrices: > > x = Table[Random[],{3},{4}]; > y = Table[Random[],{3},{4}]; > a=0.5; > > (These are example values I would like the following > to apply to lists of any dimension.) > When you add them they create a result with the same > dimensions where each element corresponds to the > input elements > > x + a y > > And some functions do similar > > Cos[x] + Sin[a y] > > But some don't, e.g. > > x > y > x > a > > I would have liked those to produce a matrix of corresponding > True and False results, and then something like: > > If[x > y, 1/x, x - y] > Piecewise[{{1,x==a},{x^2,x>a}},x y^2] > > to produce a matrix of results corresponding to each element. > > They don't - I haven't managed to find out why they don't or > more usefully how to do what I would like them to do. > > I have searched Help on all the likely commands (I think: Map, > Thread, Apply, Distribute, ...) and this archive, where there > are similar enquiries but none that match. Perhaps I'm looking > in the wrong place - I expect there's someone who can help. > > Robert > >