Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2005
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2005

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

Search the Archive

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


  • Prev by Date: Re: Bug Report - Two numerical values for a same variable
  • Next by Date: Re: Elegant syntax for multiple conditional assignment?
  • Previous by thread: Re: Elegant syntax for multiple conditional assignment?
  • Next by thread: Re: Elegant syntax for multiple conditional assignment?