簡體   English   中英

Matlab替換矩陣中的值

[英]matlab replace value in matrix

我試圖用這樣的特定節點號替換邊列表矩陣的第一和第二列(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和coll中的所有1替換為183,將2替換為150等。

然后,我需要保留這個新邊緣列表,並將其添加到較大的邊緣列表中,將其轉換回鄰接矩陣,並擁有新的正確的較大的adjM。

我試圖在這里和其他網站上找到解決方案,但沒有成功。 克里斯,非常感謝您的幫助

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM