Re: How can I perform Matrix comparison? Can any one with kindness help
- To: mathgroup at smc.vnet.net
- Subject: [mg114819] Re: How can I perform Matrix comparison? Can any one with kindness help
- From: Leonid Shifrin <lshifr at gmail.com>
- Date: Fri, 17 Dec 2010 23:49:25 -0500 (EST)
Hi, For element-wise comparison of matrices with same dimensions, you can use listability: In[155]:= Clear[elementwiseCompare] elementwiseCompare[mat1_?MatrixQ, mat2_?MatrixQ, oper_] /; Equal @@ Map[Dimensions, {mat1, mat2}] := Function[{m1, m2}, oper[m1, m2], Listable][mat1, mat2]; In[157]:= elementwiseCompare[{{a, b}, {c, d}}, {{e, f}, {g, h}}, Greater] Out[157]= {{a > e, b > f}, {c > g, d > h}} In[158]:= elementwiseCompare[{{a, b}, {c, d}}, {{e, f}, {g, h}}, Less] Out[158]= {{a < e, b < f}, {c < g, d < h}} With your matrices: In[159]:= Block[{a = {{2, 3}, {4, 5}}, b = {{1, 2}, {2, 3}}}, elementwiseCompare[a, b, Greater]] Out[159]= {{True, True}, {True, True}} If you need a single answer, can Flatten the resulting Boolean matrix and Apply And: In[160]:= And @@ Flatten[%] Out[160]= True Regards, Leonid On Fri, Dec 17, 2010 at 2:21 PM, Nasser M. Abbasi <nma at 12000.org> wrote: > On 12/17/2010 12:29 AM, fmingu wrote: > > I am using mathematica for practical purpose. > > I wonder how can I perform Matrix comparison. > > For instance: > > a={{2,3},{4,5}}; b={{1,2},{2,3}}; > > a>b > > I want the result is True. > > Based on what definition? > > Mathematica uses ">" for numbers, but you have a matrices to compare. > > > But it seems that Mathematica can not recognize it. > > I do not know how I can solve it? Are there any additional package to be > added? > > Can any one with kindness help me? > > Normally one uses a matrix norm to compare matrices, but if > you use element by element compare, you can use > Map or Thread of one of those functions to compare > corresponding elements. > > But one way I've done this before is by making a > list of the corresponding elements of each matrix, then > Map the operator on them. Using your example: > > lis=Inner[List,Flatten[a],Flatten[b],List] > > {{2,1},{3,2},{4,2},{5,3}} > > Map[Greater,lis] > > {True,True,True,True} > > There is I am sure a shorter way to do this without even > making a list first. > > --Nasser > >