Re: Elegant syntax for multiple conditional assignment?
- To: mathgroup at smc.vnet.net
- Subject: [mg54458] Re: [mg54337] Elegant syntax for multiple conditional assignment?
- From: DrBob <drbob at bigfoot.com>
- Date: Sun, 20 Feb 2005 00:11:27 -0500 (EST)
- References: <Pine.LNX.4.44.0502191343310.3694-100000@pearl.local>
- Reply-to: drbob at bigfoot.com
- Sender: owner-wri-mathgroup at wolfram.com
It's just the same trick on another level. Like this: Clear@update update[cond_List][old_List, new_List] := Thread@If[cond, new, old] n = 6; old = {Array[olda, {n}], Array[oldc, {n}], Array[oldx, {n}], Array[oldy, {n}]}; new = {Array[newa, {n}], Array[newc, {n}], Array[newx, {n}], Array[newy, {n}]}; cond = Table[Random[Integer] == 1, {n}] {True, True, False, False, True, False} update[cond] @@@ Transpose@{old, new}; TableForm[%, TableHeadings -> {{"a", "c", "x", "y"}, cond}] TableForm[{{"", True, True, False, False, True, False}, {"a", newa[1], newa[2], olda[3], olda[4], newa[5], olda[6]}, {"c", newc[1], newc[2], oldc[3], oldc[4], newc[5], oldc[6]}, {"x", newx[1], newx[2], oldx[3], oldx[4], newx[5], oldx[6]}, {"y", newy[1], newy[2], oldy[3], oldy[4], newy[5], oldy[6]}}, TableHeadings -> {{"a", "c", "x", "y"}, {True, True, False, False, True, False}}] Bobby On Sat, 19 Feb 2005 13:51:36 -0500 (EST), Scott Hemphill <hemphill at hemphills.net> wrote: > On Sat, 19 Feb 2005, DrBob wrote: > >> (inputs) >> old = Array[o, {4}] >> new = Array[n, {4}] >> cond = Array[1 == Random[Integer, {0, 1}] & , {4}] >> >> (outputs) >> {o[1], o[2], o[3], o[4]} >> {n[1], n[2], n[3], n[4]} >> {True, False, True, False} >> >> (input) >> Thread[If[cond, Evaluate[new], Evaluate[old]]] >> >> (result) >> {n[1], o[2], n[3], o[4]} >> >> or: >> >> old = {a, c, x, y} = Array[o, {4}] >> new = {a, c, x, y} = old^2 >> cond = Array[1 == Random[Integer, {0, 1}] &, {4}] >> >> {o[1], o[2], o[3], o[4]} >> {o[1]^2, o[2]^2, o[3]^2, o[4]^2} >> {True, False, False, False} >> >> {a, c, x, y} = Thread[If[cond, Evaluate@new, Evaluate@old]] >> >> {o[1]^2, o[2], o[3], o[4]} > > This isn't quite what I had in mind. What I have is more like: > > n=100 > old={Array[olda,{n}], Array[oldc,{n}], Array[oldx,{n}], Array[oldy,{n}]} > new={Array[newa,{n}], Array[newc,{n}], Array[newx,{n}], Array[newy,{n}]} > cond=Table[Random[Integer]==1,{n}] > > Now "a" should be assigned a list whose k'th element is picked from either > olda[[k]] or newa[[k]] depending on cond[[k]], and similarly for c, x, and > y. > > Thanks for your help! > > Scott -- DrBob at bigfoot.com www.eclecticdreams.net