我试图用特定的节点号替换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。
我试图在这里和其他网站上找到解决方案,但没有成功。非常感谢您的帮助, 克里斯
答案 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