簡體   English   中英

從距離矩陣到鄰接矩陣

[英]From a matrix of distances to a matrix of adjacency

我有一個距離1024x1024的矩陣,其中包含所有條件之間的所有距離。 我想從此開始定義一個圖。 因此,我定義了最小生成樹,並據此計算了鄰接矩陣。

我的距離矩陣是distMat

matrix_of_distances <- as.matrix(distMat)
myGraph <- graph.adjacency(matrix_of_distances, weighted=TRUE)

我的圖是具有所有可能的圓弧的圖(因為所有兩對項之間的距離都是有限值)。 我需要另一個圖,稀疏:

mst <- as.undirected(minimum.spanning.tree(myGraph))

從該稀疏圖中,我可以使用以下公式計算鄰接矩陣:

adjacency <- as_adjacency_matrix(mst, type = c("both", "upper", "lower"), attr = NULL, edges = FALSE, names = TRUE, sparse =igraph_opt("sparsematrices"))

現在,我想以不同的方式創建矩陣鄰接,並傳遞另一個最小生成樹對象。 假設我創建了另一棵生成樹:

spt <- spantree(matrix_of_distances)

如果我做:

adjacency <- as_adjacency_matrix(spt, type = c("both", "upper", "lower"), attr = NULL, edges = FALSE, names = TRUE, sparse =igraph_opt("sparsematrices"))

我收到錯誤:

as_adjacency_matrix(spt,type = c(“ both”,“ upper”,“ lower”),中的錯誤:不是圖形對象

再次,我試圖從最小生成樹生成鄰接矩陣。 我怎么解決這個問題?

錯誤是由於您在期望igraph時在類spantree的對象上使用函數as_adjacency_matrix而引起的。

由於您使用igraph ,一個簡單的解決辦法是從原來的“距離圖”與計算最小生成樹igraph的功能mst

這是spantree計算最小生成樹的方式:

require(vegan)
data(dune)
dis <- vegdist(dune)
tr <- spantree(dis)

結果是下面的樹( plot(tr, type="t")

在此輸入圖像描述

僅使用igraph函數可以獲得相同的結果:

library(igraph)
g  <- graph.adjacency(as.matrix(dis), weighted=TRUE)
g_mst <- mst(g)

生成的樹看起來像這樣( plot(g_mst, vertex.color=NA, vertex.size=10, edge.arrow.size=0.5) ):

在此輸入圖像描述

擁有igraph樹后,您已經知道可以使用as_adjacency_matrix函數將其轉換為鄰接矩陣:

A <- as_adjacency_matrix(mst)

暫無
暫無

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

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