第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

根據(jù)numpy數(shù)組中的組標(biāo)簽對(duì)鄰接矩陣中的邊求和

根據(jù)numpy數(shù)組中的組標(biāo)簽對(duì)鄰接矩陣中的邊求和

慕碼人2483693 2023-03-01 17:49:34
例如,我得到了對(duì)稱鄰接矩陣(無(wú)自環(huán)),即A = [[0, 1, 1, 0, 0],[1, 0, 1, 0, 1],[1, 1, 0, 1, 0],[0, 0, 1, 0, 1],[0, 1, 0, 1, 0]]然后,我得到了一組與該圖關(guān)聯(lián)的簇標(biāo)簽 i,即cluster = [1,1,2,2,3]這意味著節(jié)點(diǎn)1和節(jié)點(diǎn)2在同一組,節(jié)點(diǎn)3和節(jié)點(diǎn)4在同一組,節(jié)點(diǎn)5在一個(gè)獨(dú)立的組。問(wèn)題是我怎樣才能得到組內(nèi)和組間的邊的總和,組內(nèi):指共享相同簇標(biāo)簽的節(jié)點(diǎn)之間的邊,例如節(jié)點(diǎn)1和節(jié)點(diǎn)2在同一組中,因此它們的和為1,節(jié)點(diǎn)3和節(jié)點(diǎn)4相同。對(duì)于節(jié)點(diǎn)5 ,它的 0。組間:表示共享不同簇標(biāo)簽的節(jié)點(diǎn)之間的邊,例如group 1和group 2,表示節(jié)點(diǎn)1節(jié)點(diǎn)3,節(jié)點(diǎn)1節(jié)點(diǎn)4,節(jié)點(diǎn)2節(jié)點(diǎn)3,節(jié)點(diǎn)2節(jié)點(diǎn)4的邊之和. 組1和組2之間的答案是2。然后返回一個(gè)包含結(jié)果的二維對(duì)稱數(shù)組,即[[1,2,1],[2,1,1],[1,1,0]]
查看完整描述

2 回答

?
紫衣仙女

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊

您可以使用矩陣代數(shù);


cluster = np.array(cluster)

# create cluster-node adjacency matrix

aux = np.identity(cluster.max(),int)[cluster-1]

# we can now count by multiplying

out = aux.T@A@aux

# fix diagonal (which was counted twice)

np.einsum("ii->i",out)[...] //= 2

out

# array([[1, 2, 1],

#        [2, 1, 1],

#        [1, 1, 0]])

為了加快速度,如果節(jié)點(diǎn)按集群排序,我們可以用 (1) 替換矩陣乘積:


boundaries = np.diff(cluster,prepend=-1).nonzero()[0]

out =  np.add.reduceat(np.add.reduceat(A,boundaries,1),boundaries,0)

(2) 如果不是:


nc = cluster.max()

out = np.zeros((nc,nc),int)

np.add.at(out,(cluster[:,None]-1,cluster-1),A)


查看完整回答
反對(duì) 回復(fù) 2023-03-01
?
眼眸繁星

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊

這將返回一個(gè)數(shù)組,其元素[i,j]是相應(yīng)簇的邊的總和i和j:


n = cluster.max()

degrees = np.zeros((n,n))

idx = [np.where(cluster==i)[0] for i in np.arange(n)+1]

for i in range(n):

  degrees[i,i] = A[np.ix_(idx[i],idx[i])].sum()/2

  for j in range(i):

    degrees[i,j] = degrees[j,i] = A[np.ix_(idx[i],idx[j])].sum()

輸出:


[[1. 2. 1.]

 [2. 1. 1.]

 [1. 1. 0.]]

您也可以使用 itertools,但我認(rèn)為這可能更快。


查看完整回答
反對(duì) 回復(fù) 2023-03-01
  • 2 回答
  • 0 關(guān)注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)