Re: Fast matrices comparison
- To: mathgroup at smc.vnet.net
- Subject: [mg115911] Re: Fast matrices comparison
- From: Oliver Ruebenkoenig <ruebenko at wolfram.com>
- Date: Tue, 25 Jan 2011 06:30:39 -0500 (EST)
On Tue, 25 Jan 2011, JJ wrote: > Hi MathGroup > > I have to compare two big matrices (in the SparseArray form), say m1 and m2. > I need that the elements of m1 will be replaced by 0 if they are less or > equal to > the corresponding elements of m2. > > For example, if m1={{8,7},{3,9}} and m2={{2,3},{4,5}}, > I would like to have m1={{8,7},{0,9}} because m1[[2,1]]<m2[[2,1]]. > > I can do it easily with two nested for loops but I think it is not an > efficient way to do it. > I was wondering if somebody knows how to do it using a fast conditional > replacement rule and/or pure functions. > > Thank you. > > > JJ, how about this m1 = {{8, 7}, {3, 9}}; m2 = {{2, 3}, {4, 5}}; sm1 = SparseArray[m1]; sm2 = SparseArray[m2]; v1 = sm1["NonzeroValues"]; v2 = sm2["NonzeroValues"]; SparseArray[sm1["NonzeroPositions"] -> v1*UnitStep[v1 - v2 - 1]]; Oliver