See also http://stackoverflow.com/a/32778103/1939814

--Tim

On Friday, September 25, 2015 09:55:31 AM Charles Novaes de Santana wrote:
> Hi Valentin,
> 
> Thanks a lot for your suggestion! It makes exactly what I need, with a
> clear code. I still don't know if efficiency will be an issue for my
> problems, but I hope it won't.
> 
> Just don't agree with your advice to only post in one place. Is there any
> special reason for it besides the overlap of users?
> 
> I see some differences between asking in the mailing-list or in
> stackoverflow, even if there is an overlap between of users of both forums.
> In stackoverflow there is kind of a competition of the best responses that
> I think is interesting, we can learn a lot from everyone there. And I think
> it is not the focus of this list. Just my opinion.
> 
> By the way, the final solution for my problem is the following piece of
> code:
> 
> using Images
> 
> function findMat(mat,value)
>     return(collect(zip(ind2sub(size(mat),find( x -> x == value, mat))...)));
> end
> 
> mat = [1 1 0 0 0 ; 1 1 0 0 0 ; 0 0 0 0 1 ; 0 0 0 1 1]
> 
> labels = label_components(mat);
> 
> for c in 1:maximum(labels)
>     comp = findMat(labels,c);
>     println("Component $c is composed by the following elements
> (row,col)");
>     println("$comp\n");
> end
> 
> 
> Thanks again for your help!
> 
> Best,
> 
> Charles
> 
> On 25 September 2015 at 09:07, Valentin Churavy <[email protected]> wrote:
> > Hej Charles,
> > 
> > in the future please only post in one place. A lot of the people who
> > answer on SO are also here.
> > 
> > You can use the label_components function in Images.jl
> > https://github.com/timholy/Images.jl/blob/master/doc/function_reference.md
> > #label_components To get the the list of coordinates for each components
> > you then would have to do something along the line of.
> > 
> > for c in 1:maximum(labels)
> > 
> >    find(x-> x == c, labels)
> > 
> > end
> > 
> > Not very efficient but that should get you started.
> > 
> > On Friday, 25 September 2015 07:56:20 UTC+9, Charles Santana wrote:
> >> Assume I have the following matrix:
> >>     mat = [1 1 0 0 0 ; 1 1 0 0 0 ; 0 0 0 0 1 ; 0 0 0 1 1]
> >> 
> >> Considering as a "component" a group of neighbour elements that have
> >> value '1', how to identify that this matrix has 2 components and which
> >> vertices compose each one?
> >> 
> >> For the matrix *mat* above I would like to find the following result:
> >> 
> >> Component 1 is composed by the following elements of the matrix
> >> 
> >> (row,column):
> >>     (1,1)
> >>     (1,2)
> >>     (2,1)
> >>     (2,2)
> >> 
> >> Component 2 is composed by the following elements:
> >>     (3,5)
> >>     (4,4)
> >>     (4,5)
> >> 
> >> I can use Graph algorithms like this
> >> <http://graphsjl-docs.readthedocs.org/en/latest/algorithms.html#connected
> >> -components> to identify components in square matrices. However such
> >> algorithms can not be used for non-square matrices like the one I
> >> present here.
> >> 
> >> Any idea will be much appreciated.
> >> 
> >> I am open if your suggestion involves the use of a Python library +
> >> PyCall for example. Although I would prefer to use a pure Julia solution.
> >> 
> >> Regards
> >> Charles
> >> P.S.: Just asked the same question in Stackoverflow:
> >> https://stackoverflow.com/questions/32772190/how-to-find-connected-compon
> >> ents-in-a-matrix-using-julia
> >> 
> >> --
> >> Um axé! :)
> >> 
> >> --
> >> Charles Novaes de Santana, PhD
> >> http://www.imedea.uib-csic.es/~charles

Reply via email to