Re: Elegant syntax for multiple conditional assignment?
- To: mathgroup at smc.vnet.net
- Subject: [mg54500] Re: [mg54337] Elegant syntax for multiple conditional assignment?
- From: "Wolf, Hartmut" <Hartmut.Wolf at t-systems.com>
- Date: Tue, 22 Feb 2005 04:22:57 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
>-----Original Message----- >From: Scott Hemphill [mailto:hemphill at hemphills.net] To: mathgroup at smc.vnet.net >Sent: Saturday, February 19, 2005 8:32 AM >To: mathgroup at smc.vnet.net >Subject: [mg54500] [mg54337] Elegant syntax for multiple conditional assignment? > >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. > >Scott >-- >Scott Hemphill hemphill at alumni.caltech.edu >"This isn't flying. This is falling, with style." -- Buzz Lightyear > > t = Transpose; {a, c, x, y} = t@Thread[If[##]] &[cond, t[new], t[old]] -- Hartmut Wolf