Re: Comparing Corresponding Columns of Two Matrices

*To*: mathgroup at smc.vnet.net*Subject*: [mg97568] Re: [mg97496] Comparing Corresponding Columns of Two Matrices*From*: Gregory Lypny <gregory.lypny at videotron.ca>*Date*: Sun, 15 Mar 2009 05:30:08 -0500 (EST)*References*: <17032823.1237030239609.JavaMail.root@m02>

Thanks David, Marvelous stuff! I'll have to study the @@ thing, but it's a happy coincidence because the depth of arrays has posed problems for me in other situations. You may be helping me kill more than one bird with a single stone Regards, Gregory On Sat, Mar 14, 2009, at 9:12 AM, David Park wrote: > Gregory, > > Here is one method. Whenever I want to perform some operation on two > equal > length vectors I think of the Inner command. In your problem we are > going to > apply this twice, once to compare the elements in two columns, and > once to > accumulate a list of results for all the columns. > > Here is a routine to compare the elements in two columns, each > column given > by a list, to see if all the elements in the first column are > greater than > the corresponding elements in the second column. > > greaterColumn[column1_, column2_] := > Inner[#1 > #2 &, column1, column2, And] > > Try it out on two cases. > > greaterColumn[{2, 3, 4, 5}, {1, 2, 3, 4}] > True > > greaterColumn[{2, 3, 4, 5}, {1, 6, 3, 7}] > False > > The following will generate text xmat and ymat matrices. I make them > only 8 > rows long instead of 100. I also bias xmat to be greater than ymat > so that > we might get some True conditions. > > (xmat = Table[ > RandomInteger[{3, 7}], {x, 1, 8}, {y, 1, 4}]) // MatrixForm > (ymat = Table[ > RandomInteger[{0, 5}], {x, 1, 8}, {y, 1, 4}]) // MatrixForm > > The following then compares the two matrices column by column. > > Inner[greaterColumn[#1, #2] &, f @@ Transpose[xmat], > f @@ Transpose[ymat], List] > > There is one caveat or trick that I have used. For arrays, Inner > works like > Dot and this is not what we want. We want the two items to look like > vectors > and not arrays, so I used f@@ on the transposed matrices to change > the outer > List brackets to f, and now they no longer look like 2-dimensional > arrays, > but like 1-dimensional vectors. > > > David Park > djmpark at comcast.net > http://home.comcast.net/~djmpark/ > > > From: Gregory Lypny [mailto:gregory.lypny at videotron.ca] > > > Hello everyone, > > I'm trying to develop a modest skill in mapping functions and I've > been working on this problem. > > Suppose I have two 100 x 4 matrices, X and Y, and I want to see > whether each value in a column of X is bigger than each value in the > corresponding column of Y. In other words, compare column 1 of X with > column 1 of Y, column 2 of X with column 2 of Y, and so on. > > It's easy to generate a 100 x 4 table of Booleans using Table as > > Table[Boole[X[[i , j]] > Y[[i, j]]], {i, 100}, {j, 4}] > > But what about without Table? I am able to do it for the comparison > of any one column as > > Boole[#[[1]] > #[[2]]] & /@ Transpose[{X[[All, ]], Y[[All, 1]]}] > > but I'm not sure how to extend this to other columns. Any tip would > be much appreciated. > > Regards, > > Gregory > >

**Follow-Ups**:**Don't understand the response***From:*"dglawler" <dglawler@comcast.net>