Mathematica 9 is now available
Student Support Forum
-----
Student Support Forum: 'MapAt with All operator' topicStudent Support Forum > General > Archives > "MapAt with All operator"

< Previous CommentHelp | Reply To Comment | Reply To Topic
Author Comment/Response
yehuda ben-shimol
09/27/10 04:28am

In Response To 'Re: Re: MapAt with All operator'
---------
I have found some more spare minutes so I'll elaborate...
using Span (;; notation) is available only as indexes of lists and matrices. It is a more "friendly" syntax for Range which always work

now, to use MapAt for a sub matrix, or modify the matrix in several places you need to define each such position. This eventually mimics (internally) the behavior I posted earlier, it is not better nor worse using Map rather than MapAt (and vice versa).

you also need not "compute" the size of a matrix, there is a Dimensions function for that matter

so, combining all of this, I have implemented a small function that will fit your needs

MapSpanAt[fun_, mat_, rows_, cols_] :=
Module[{dim = Dimensions[mat], r, c},
r = Switch[rows, _Integer, Range[rows], All,
Range[First[dim]], _Span, Range @@ (rows /. All -> First[dim])];
c = Switch[cols, _Integer, Range[cols], All,
Range[Last[dim]], _Span, Range @@ (cols /. All -> Last[dim])];
MapAt[fun, mat, Tuples[{r, c}]]
]

now, if you define

aaa = {{1, 2 + I, 3 + I, 4 + I}, {5, 6 + I, 7 + I, 8 + I}, {9, 10 + I,
11 + I, 12 + I}};

and call for example
MapSpanAt[Im,aaa,All,2;;All]
it returns the desired result


yehuda



URL: ,

Subject (listing for 'MapAt with All operator')
Author Date Posted
MapAt with All operator krindik 09/23/10 8:02pm
Re: MapAt with All operator yehuda ben-s... 09/26/10 02:37am
Re: Re: MapAt with All operator krindik 09/26/10 7:19pm
Re: Re: Re: MapAt with All operator yehuda ben-s... 09/27/10 00:29am
Re: Re: Re: MapAt with All operator yehuda ben-s... 09/27/10 04:28am
< Previous CommentHelp | Reply To Comment | Reply To Topic