MathGroup Archive 2008

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

Search the Archive

Beginner: List Indexing and Assignment

  • To: mathgroup at smc.vnet.net
  • Subject: [mg94486] Beginner: List Indexing and Assignment
  • From: C Rose <cjr.list.alias.1 at me.com>
  • Date: Sun, 14 Dec 2008 07:41:13 -0500 (EST)

Hi

I am moving from another system to Mathematica and have a few simple questions about indexing and altering lists. I've been able to find Mathematica equivalents to some of the other system's  idioms, but as a Mathematica neophyte they're not very elegant. I'd be very grateful if someone could tell me the Mathematica equivalents---or point me to a suitable Rosetta stone (Google didn't easily turn one up).

In the other system, I would create a 2x3 matrix using

a = [1 2 3; 4 5 6]

resulting in

[1 2 3]
[4 5 6]

and then assign any element of the matrix whose value is greater than 2 the value -1 using

a(a>2) = -1

resulting in

[ 1  2 -1]
[-1 -1 -1]

I can do this in Mathematica by:

a = ReplacePart[a, Position[a, x_ /; x > 2] -> -1]

but is there a more elegant method?

Another way (in the other system) is to create a logical array:

logical = a>2

resulting in

[0 0 1]
[1 1 1]

and I could then do

a(logical) = -1

again resulting in

[ 1  2 -1]
[-1 -1 -1]

I have been able to approximate this in Mathematica as

logical = a /. x_ /; x > 2 -> True
(* Note, unlike above, logical contains values of True and other integers. *)

ReplacePart[a, Position[logical, x_ /; x == True] -> -1]

Is there a more elegant method in Mathematica? (Of course, 'elegant' is a subjective quality; perhaps 'brevity' is a better word :-)

Many thanks in advance

Chris





  • Prev by Date: Re: Sample uniformly from a simplex
  • Next by Date: Re: Aligning two PLots
  • Previous by thread: Re: Problem with HoldForm & Unevaluated
  • Next by thread: Re: Beginner: List Indexing and Assignment