Re: Add terms surrounded by zero together in matrix
- To: mathgroup at smc.vnet.net
- Subject: [mg59132] Re: Add terms surrounded by zero together in matrix
- From: Paul Abbott <paul at physics.uwa.edu.au>
- Date: Sat, 30 Jul 2005 01:25:05 -0400 (EDT)
- Organization: The University of Western Australia
- References: <dcccur$3j7$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
In article <dcccur$3j7$1 at smc.vnet.net>, "mchangun at gmail.com" <mchangun at gmail.com> wrote: > 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. Have a look at the literature on percolation clusters and in the MathGroup archive. I would have thought that you could use << Statistics`ClusterAnalysis` to solve this, but I could not get it to work right. The basic idea I had was to locate the non-zero entries in dat = {{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}}; using Position: pos = Position[dat, n_Integer /; n > 0] and then apply FindClusters to these positions. For example, cl = FindClusters[pos, DistanceFunction -> BrayCurtisDistance] gives 3 clusters (I tried other distance metrics and several of the myriad of options to FindClusters to try to get FindClusters to only find "connected" clusters). From these clusters, Extract[dat, #] & /@ cl gets the values in each cluster, and Total /@ % gives the totals for each cluster. Maybe others can see how to improve on this -- or explain why this approach cannot work. Cheers, Paul -- Paul Abbott Phone: +61 8 6488 2734 School of Physics, M013 Fax: +61 8 6488 1014 The University of Western Australia (CRICOS Provider No 00126G) AUSTRALIA http://physics.uwa.edu.au/~paul http://InternationalMathematicaSymposium.org/IMS2005/