簡體   English   中英

優化圖形鄰接的矢量化代碼

[英]Optimizing vectorized code for graph adjacency

我正在MATLAB中編寫一些機器學習代碼,我用一個鄰接矩陣A表示一個圖形,並用以下列方式定義矩陣Z的圖形聚類。

答:如果節點i和節點j之間存在邊緣,則a_ij為1。 否則為0。 Z:如果節點j在簇i中,則z_ij為1。 否則為0。

我正在計算一個矩陣N,它是簇之間的邊數,按以下方式定義:

N:n_ij是集群i中的節點與集群j中的節點之間的邊數。 n_ii是簇i內的邊數。

N可以通過以下公式計算:

N = zAz'

其中z'是z轉置的。

如果我有很多節點,那么計算這需要一些時間,但這不是問題。 問題是,我將節點從群集移動到群集很多次,每次我想要計算N.

所以問題如下:鑒於我知道N,然后我將節點i從集群c_1移動到集群c_2,如何以有效的方式更新N?

要從Z到Z + U,請更新

N←N + Z(AU')+(UA)Z'+ UAU'
Z←Z + U.

Z和U(和A,如果它對你的圖有意義)應該有稀疏表示。 從理論上講,至少,這在編譯代碼中或多或少會在C中執行:掃描i的鄰居,減少與i的舊集群之間的邊緣計數,並將邊緣計數遞增到i的新集群。 在實踐中,您可能需要轉置Z以使其與Matlab的稀疏矩陣表示對齊,並通過替換兩個整行來執行更新Z←Z + U,以便新歸零的條目不被視為非零。

暫無
暫無

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

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