Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

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
>
>



  • Prev by Date: Re: Return Ambiguity
  • Next by Date: Re: Re: Re: The "Go Back" Button doesn't work
  • Previous by thread: Re: Comparing Corresponding Columns of Two Matrices
  • Next by thread: Don't understand the response