matlab替换矩阵中的值

时间:2014-04-28 19:29:06

标签: matlab matrix replace

我试图用特定的节点号替换edgelist矩阵的第一列和第二列(edgenumber x 3):

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

节点编号(从节点5到节点1的连接)被矢量中的相应值替换。边缘列表由未加权的40x40邻接矩阵生成。 大小为40x1的矢量degree_list包含该边缘列表的“实际”节点号,我想将其添加到更大的321x321邻接矩阵中。 (如果有更简单的方法,那么通过连接边缘列表,这也会很棒)。

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

以上边缘列表中我想将coll 1和2中的所有1替换为183,将所有2替换为150等。

然后我需要保留这个新的边缘列表,我将其添加到更大的边缘列表中,将其转换回邻接矩阵并使我的新正确的更大的adjM。

我试图在这里和其他网站上找到解决方案,但没有成功。非常感谢您的帮助, 克里斯

1 个答案:

答案 0 :(得分:1)

<强>代码

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)]

<强>输出

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