MathGroup Archive 2005

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

Search the Archive

Re: Add terms surrounded by zero together in matrix

  • To: mathgroup at smc.vnet.net
  • Subject: [mg59146] Re: [mg59123] Add terms surrounded by zero together in matrix
  • From: "Fred Simons" <f.h.simons at tue.nl>
  • Date: Sat, 30 Jul 2005 01:25:23 -0400 (EDT)
  • References: <200507290442.AAA03344@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

I consider two non-zero elements that touch under 45 degrees as belonging to 
the same group. So e.g. starting with the 3x3 identity matrix results in {3} 
rather than {1,1,1}. If this is not what you want you can remove {-1,-1} and 
{-1,1} from the following solution.


In[1]:=
mat = {{0, 0, 0, 1, 0}, {0, 0, 1, 2, 0},
{0, 0, 0, 2, 1}, {1, 3, 0, 0, 0},
{0, 0, 0, 0, 0}, {0, 0, 0, 0, 0},
{0, 0, 1, 1, 0}, {5, 0, 3, 0, 0},
{0, 0, 0, 0, 0}, {0, 0, 0, 3, 1}};


In[2]:=
pos = Position[mat, _?Positive];
Clear[h, g]; maxh = 0; h[{_, _}] = 0; g[x_] := x;
tobejoined = {};
Do[m = Union[Select[h /@ (pos[[i]] + #1 & ) /@
{{-1, -1}, {-1, 0}, {-1, 1}, {0, -1}},
Positive]]; If[m == {}, h[pos[[i]]] =
maxh = maxh + 1, h[pos[[i]]] = m[[1]];
If[Length[m] > 1, AppendTo[tobejoined, m]]],
{i, 1, Length[pos]}];
((g[#1[[2]]] = #1[[1]]) & ) /@ tobejoined;
Total /@ Map[mat[[#1[[1]],#1[[2]]]] & ,
Reap[Scan[Sow[#1, g[h[#1]]] & , pos]][[2]], {2}]


Out[7]=
{7, 4, 5, 5, 4}

Fred Simons
Eindhoven University of Technology

----- Original Message ----- 
From: <mchangun at gmail.com>
To: mathgroup at smc.vnet.net
Subject: [mg59146] [mg59123] Add terms surrounded by zero together in matrix


> Hi All,
>
> I think this is a rather tough problem to solve.  I'm stumped and would
> really appreciated it if someone can come up with a solution.
>
> What i want to do is this.  Suppose i have the following matrix:
>
> 0       0       0       1       0
> 0       0       1       2       0
> 0       0       0       2       1
> 1       3       0       0       0
> 0       0       0       0       0
> 0       0       0       0       0
> 0       0       1       1       0
> 5       0       3       0       0
> 0       0       0       0       0
> 0       0       0       3       1
>
> I'd like to go through it and sum the elements which are surrounded by
> zeros.  So for the above case, an output:
>
> [7 4 5 5 4]
>
> is required.  The order in which the groups surrounded by zero is
> summed does not matter.
>
> The elements are always integers greater than 0.
>
> Thanks for any help!
> 


  • Prev by Date: Re: Add terms surrounded by zero together in matrix
  • Next by Date: Re: Re: silly questions?
  • Previous by thread: Add terms surrounded by zero together in matrix
  • Next by thread: Re: Add terms surrounded by zero together in matrix