Re: Beginner: List Indexing and Assignment
- To: mathgroup at smc.vnet.net
- Subject: [mg94493] Re: [mg94486] Beginner: List Indexing and Assignment
- From: Bob Hanlon <hanlonr at cox.net>
- Date: Mon, 15 Dec 2008 07:42:08 -0500 (EST)
- Reply-to: hanlonr at cox.net
a = {{1, 2, 3}, {4, 5, 6}};
a /. x_ /; x > 2 -> -1
{{1, 2, -1}, {-1, -1, -1}}
a /. _?(# > 2 &) -> -1
{{1, 2, -1}, {-1, -1, -1}}
Map[If[# > 2, -1, #] &, a, {2}]
{{1, 2, -1}, {-1, -1, -1}}
Bob Hanlon
---- C Rose <cjr.list.alias.1 at me.com> wrote:
=============
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
--
Bob Hanlon