MathGroup Archive 2007

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

Search the Archive

Re: Re: 2D pattern matching

  • To: mathgroup at smc.vnet.net
  • Subject: [mg77381] Re: [mg77264] Re: [mg77140] 2D pattern matching
  • From: DrMajorBob <drmajorbob at bigfoot.com>
  • Date: Thu, 7 Jun 2007 04:04:05 -0400 (EDT)
  • Organization: Deep Space Corps of Engineers
  • References: <200706051024.GAA00465@smc.vnet.net> <3789605.1181136409894.JavaMail.root@m35>
  • Reply-to: drmajorbob at bigfoot.com

That solution indicates, initially, the need for an inverse to  
Partition[x_,{2,2},{1,1}] and similar things.

After changing one of the 2x2's, though, the "blown-up" matrix isn't in  
the domain of that inverse.

Bobby

On Wed, 06 Jun 2007 06:03:31 -0500, János <janos.lobb at yale.edu> wrote:

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



-- 
DrMajorBob at bigfoot.com


  • Prev by Date: Re: Developing Applications using Mathematica
  • Next by Date: Re: Iterate Through a List
  • Previous by thread: Re: 2D pattern matching
  • Next by thread: Re: Re: 2D pattern matching