I have a matrix which represents a neighbourhood relationship of index
A=[1 2
1 4
2 6
4 5
6 7
6 8]
A is in ascending order of A(:,1) and not including duplicate neighbours, meaning [1 2] is [2 1] is considered as the same neighbourhood relationship.
In matrix A, it means index 1 is the neighbour of 2 and 4, 2 is the the neighbour of 6, and 4 is the neighbour of 5. I want to compute a matrix B that represents the neighbours of neighbour(NON) relationship. This means 1 is the NON of 5 and 6, etc.
B=[1 5
1 6
2 7
2 8]
How can I compute such B

 Réponse acceptée

Matt J
Matt J le 3 Mar 2015
Modifié(e) : Matt J le 3 Mar 2015

2 votes

I think the code below would do it, but I think your example is missing some NONs. If, as you say, [1,2] and [2,1] are equivalent, then I think 2 and 4 should be NONs because they are both neighbors of 1. Similarly, 7 and 8 both neighbor 6.
m=max(A(:));
Ac=sparse(A(:,1),A(:,2),true,m,m);
Ac=double(Ac|Ac.');
Bc=(Ac*Ac)&(~Ac);
[i,j]=find(tril(Bc,-1));
B=[j,i]

3 commentaires

Image Analyst
Image Analyst le 3 Mar 2015
It looks like he's defining it not as a "neighbor of a neighbor" if it's an immediate/adjacent neighbor. It has to be 2 layers out.
Matt J
Matt J le 3 Mar 2015
Modifié(e) : Matt J le 3 Mar 2015
Yep. My code is consistent with that. Nodes 2 and 4 are two layers apart, as are nodes 7 and 8.
em
em le 4 Mar 2015
This works! Thanks alot!

Connectez-vous pour commenter.

Plus de réponses (0)

Tags

Question posée :

em
le 3 Mar 2015

Commenté :

em
le 4 Mar 2015

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by