RE: Matrix Element Extraction
- To: mathgroup at smc.vnet.net
- Subject: [mg46650] RE: [mg46622] Matrix Element Extraction
- From: "Wolf, Hartmut" <Hartmut.Wolf at t-systems.com>
- Date: Thu, 26 Feb 2004 17:54:01 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
>-----Original Message----- >From: Curt Fischer [mailto:crf3 at po.cwru.edu] To: mathgroup at smc.vnet.net >Sent: Wednesday, February 25, 2004 7:07 PM >To: mathgroup at smc.vnet.net >Subject: [mg46650] [mg46622] Matrix Element Extraction > > >In a matrix, I want to find the positions of all the integer >elements in the >rightmost column or the bottom row. > >In[1]:= >mat={{1,2,1},{4,5,6},{7,8,-Infinity}} > >Out[1]= >{{1,2,1},{4,5,6},{7,8,-Infinity}} > >In[2]:= >Position[Map[((MemberQ[Union[Flatten[{mat[[Length[mat]]], > mat[[All,Dimensions[mat][[ > 2]] ]]}]],#])&&(#!=-Infinity))&,mat,{2}],True] > >Out[2]= >{{1,1},{1,3},{2,3},{3,1},{3,2}} > >This _mostly_ does what I want, but took me forever to think of. I'm >convinced there must be an easier way... > >Especially, is there an easy way to keep the point {1,1} from >appearing on >this >list, other than using a replacement rule and an If[] command? > ({1,1} is >not a position in the bottom row or right most column, so I >don't want this >point returned.) > >Thanks for any advice. > >-- >Curt Fischer > > Curt, perhaps the most simple way to do it is to find out all positions of integer elements and then filter out those of the last row or line: {d1, d2} = Dimensions[mat]; Cases[Position[mat, _Integer, {2}], {d1, _} | {_, d2}] ==> {{1, 3}, {2, 3}, {3, 1}, {3, 2}} (the level specification for Position is essential) If you want to find the positions of the non-integer elements there, use Cases[Position[mat, _?(! IntegerQ[#] &), {2}, Heads -> False], {d1, _} | {_, d2}] ==> {{3, 3}} Alternatively you might consider, the last row or line separately: Append[#, d2] & /@ Position[mat[[All, -1]], _Integer, {1}] ==> {{1, 3}, {2, 3}} Prepend[#, d1] & /@ Position[mat[[-1]], _Integer, {1}] ==> {{3, 1}, {3, 2}} -- Hartmut Wolf