Re: 2D pattern matching

*To*: mathgroup at smc.vnet.net*Subject*: [mg77264] Re: [mg77140] 2D pattern matching*From*: János <janos.lobb at yale.edu>*Date*: Wed, 6 Jun 2007 07:03:31 -0400 (EDT)*References*: <200706051024.GAA00465@smc.vnet.net>

On Jun 5, 2007, at 6:24 AM, alexxx.magni at gmail.com wrote: > hi everybody, > > do you know how to do a pattern match involving 2D matrices? > If e.g. you have a list > > a = {{0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0}, {0, 1, 0, 1, 1, 0}, {0, > 0, 0, 1, 1, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}} > > i.e. > 0 0 0 0 0 0 > 0 1 0 0 0 0 > 0 1 0 1 1 0 > 0 0 0 1 1 0 > 0 0 0 0 0 0 > > is it possible for me to write a rule by which I am able to find the > 2x2 square of 1's, and replace it with something else? > > I studied all I could on patterns, but didnt find an answer... > > thanks for ANY help > > Alessandro Magni > Here is a newbie bit-blow-up approach: In[2]:= b = Partition[a, {2, 2}, {1, 1}] Out[2]= {{{{0, 0}, {0, 1}}, {{0, 0}, {1, 0}}, {{0, 0}, {0, 0}}, {{0, 0}, {0, 0}}, {{0, 0}, {0, 0}}}, {{{0, 1}, {0, 1}}, {{1, 0}, {1, 0}}, {{0, 0}, {0, 1}}, {{0, 0}, {1, 1}}, {{0, 0}, {1, 0}}}, {{{0, 1}, {0, 0}}, {{1, 0}, {0, 0}}, {{0, 1}, {0, 1}}, {{1, 1}, {1, 1}}, {{1, 0}, {1, 0}}}, {{{0, 0}, {0, 0}}, {{0, 0}, {0, 0}}, {{0, 1}, {0, 0}}, {{1, 1}, {0, 0}}, {{1, 0}, {0, 0}}}, {{{0, 0}, {0, 0}}, {{0, 0}, {0, 0}}, {{0, 0}, {0, 0}}, {{0, 0}, {0, 0}}, {{0, 0}, {0, 0}}}} /If you do a MatrixForm on b you will able to see where that block is and how you should get the staring coordinates:)/ Then In[4]:= Position[b, {{1, 1}, {1, 1}}] Out[4]= {{3, 4}} gives the upper left position of the block in b and that is the same as in a. /I leave the proof of it to the experts :)/ Replacing now in a is easy because you know how many cells in right and down do you want to replace from the found starting position. J=E1nos --------------------------------------------- "Its like giving a glass of ice water to somebody in Hell" Steve Jobs about iTunes on Windows

**References**:**2D pattern matching***From:*"alexxx.magni@gmail.com" <alexxx.magni@gmail.com>