我希望能够找到图中所有节点之间的距离,但是不是将边权重相加,而是将它们相乘。
我可以按照以下方式获取所有节点之间的距离:
据我所知,在igraph的“开箱即用”选项中无法完成此操作,我正在努力自己解决问题(在实际数据中,矩阵要大得多,并且有各种不同的大小)。如有建议,请不吝赐教。
举个例子:
library(igraph)
# create a weighted adjacency matrix
mx <- structure(c(0, 0.5, 0, 0, 0, 0.5, 0, 0.5, 0.5, 0, 0, 0.5, 0, 0, 0.5, 0, 0.5,
0, 0, 0, 0, 0, 0.5, 0, 0), .Dim = c(5L, 5L))
## convert to igraph object
mx2 <- graph.adjacency(mx, weighted = TRUE)
我可以按照以下方式获取所有节点之间的距离:
我可以按照以下方式获取所有节点之间的距离:
shortest.paths(mx2)
[,1] [,2] [,3] [,4] [,5]
[1,] 0.0 0.5 1.0 1.0 1.5
[2,] 0.5 0.0 0.5 0.5 1.0
[3,] 1.0 0.5 0.0 1.0 0.5
[4,] 1.0 0.5 1.0 0.0 1.5
[5,] 1.5 1.0 0.5 1.5 0.0
但是,这个计算距离的方法是通过将相关权重相加来计算所有节点之间的距离。我想要将它们相乘,结果如下:
[,1] [,2] [,3] [,4] [,5]
[1,] 0.000 0.50 0.25 0.250 0.125
[2,] 0.500 0.00 0.50 0.500 0.250
[3,] 0.250 0.50 0.00 0.250 0.500
[4,] 0.250 0.50 0.25 0.000 0.125
[5,] 0.125 0.25 0.50 0.125 0.000
据我所知,在igraph的“开箱即用”选项中无法完成此操作,我正在努力自己解决问题(在实际数据中,矩阵要大得多,并且有各种不同的大小)。如有建议,请不吝赐教。
ifelse(ln.mx!=0, log(ln.mx), 0)
。由于权重为0的链接对距离没有任何贡献,因此它们被略微不一致地处理并不重要--它们不会影响结果,因为它们的权重为零。 - gfgmE(ln.mx2)$weight <- -1 * (ifelse(E(ln.mx2)$weight != 0, log(E(ln.mx2)$weight), 0)
。 - gfgm