2014-04-28 8 views
1

Je suis en train de remplacer la première et la deuxième colonne d'une matrice de edgelist (edgenumber x 3) par des numéros de noeud spécifique en tant que tel:remplacer Matlab valeur dans la matrice

5 1 1 
1 38 1 
2 1 1 
28 17 1 
18 1 1 
25 1 1 

que les numéros de noeuds (connexion à partir du noeud 5 au noeud 1) sont remplacés par les valeurs correspondantes d'un vecteur. L'edgelist est généré à partir d'une matrice d'adjacence non pondérée 40x40. La liste des degrés vectorielle de taille 40x1 contient les numéros de nœuds "réels" de cet edgelist que je veux ajouter à une matrice d'adjacence plus grande de 321x321. (s'il y a un moyen plus facile de le faire alors en concaténant les edgelists, ce serait aussi génial).

degree_list=[183,150,151,39,184,185,152,...]; 

donc de edgelist ci-dessus, je voudrais remplacer tous les 1 à 2 et coll 1 par 183, tous les 2 s par 150, etc.

alors je dois garder cette nouvelle edgelist que je l'add au plus grand edgelist, le transformer en une matrice d'adjacence et avoir ma nouvelle adjM plus grande correcte.

J'ai essayé de trouver une solution ici et sur d'autres sites mais je n'ai pas réussi. Merci beaucoup pour votre aide, Chris

Répondre

1

code

a1 = [ 
    5 1 1 
    1 38 1 
    2 1 1 
    28 17 1 
    18 1 1 
    25 1 1] 
degree_list=[183,150,151,39,184,185,152]; 
col12 = a1(:,[1 2]) 

col12_uniq = unique(col12) 
degree_list = [degree_list numel(degree_list)+1:max(col12_uniq)] 

uniq_dim3 = bsxfun(@eq,col12,permute(repmat(col12_uniq,1,2),[3 2 1])) 
match_dim3 = bsxfun(@times,uniq_dim3,permute(degree_list(col12_uniq),[3 1 2])) 
a1_out = [sum(match_dim3,3) a1(:,3)] 

Sortie

a1 = 

    5  1  1 
    1 38  1 
    2  1  1 
    28 17  1 
    18  1  1 
    25  1  1 


a1_out = 

    184 183  1 
    183 38  1 
    150 183  1 
    28 17  1 
    18 183  1 
    25 183  1 
+0

+1 principalement pour la compréhension de la question :-P ... BTW, je suivais votre suggestion et changé mon profil –

+0

Haha! Bien joué sur la chose de profil! A propos de cette question, je pensais que ce n'était pas trop compliqué avec les mots au moins. – Divakar

+0

Merci beaucoup, @Divakar, il fait exactement ce que j'espérais! Vous étiez beaucoup d'aide! – matrician