Re: Elegant syntax for multiple conditional assignment?
- To: mathgroup at smc.vnet.net
- Subject: [mg54424] Re: Elegant syntax for multiple conditional assignment?
- From: Scott Hemphill <hemphill at hemphills.net>
- Date: Sun, 20 Feb 2005 00:09:35 -0500 (EST)
- References: <cv6q9a$65c$1@smc.vnet.net>
- Reply-to: hemphill at alumni.caltech.edu
- Sender: owner-wri-mathgroup at wolfram.com
Scott Hemphill <hemphill at hemphills.net> writes: > Dear Mathematica aficionados: > > I have several state variables, each of which is a vector of "n" elements. > I would like to assign each element in each vector based on a condition > which is in the corresponding position in a condition vector. To be more > specific: > > Each of a, c, x and y is a List of Length n. > cond is a List of Length n, containing True and False values > > What I have is > > old = {a, c, x, y}; > > code which changes a, c, x, and y > > new = {a, c, x, y}; > > What I want to do is assign to each element of a, c, x and y the old value > of a, c, x or y if the corresponding element of cond is False, and the new > value of a, c, x or y if the corresponding element of cond is True. > > I've got a method that works: > > t=Transpose; > {a, c, x, y} = t[If[#[[1]],#[[2]],#[[3]]]& /@ t[{cond,t[new],t[old]}]]; > > All the transpositions and array indexing make me wonder if there's a more > elegant way of expressing this. > > Any takers? Thanks in advance. Maybe I should have given a more concrete example: old = {Array[olda,{5}], Array[oldc,{5}], Array[oldx,{5}], Array[oldy,{5}]}; new = {Array[newa,{5}], Array[newc,{5}], Array[newx,{5}], Array[newy,{5}]}; cond = {True,False,True,False,True}; I want to assign: a = {newa[1], olda[2], newa[3], olda[4], newa[5]} based on the conditions in cond, and similarly for c, x, and y. Scott -- Scott Hemphill hemphill at alumni.caltech.edu "This isn't flying. This is falling, with style." -- Buzz Lightyear