我想知道如何spring_layout
考虑边缘权重。来自维基百科,
另一种模型考虑每对节点 (i,j) 的类似弹簧的力,其中每个弹簧的理想长度 delta_{ij} 与节点 i 和 j 之间的图论距离成正比,而不使用单独的排斥力。最小化节点之间的欧几里得距离和理想距离之间的差异(通常是平方差)相当于度量多维缩放问题。
具体来说,边缘权重是如何考虑的?
这不是一个很好的答案,但它提供了基础知识。其他人可能会真正了解 Fruchterman-Reingold 算法并能描述它。我根据我在代码中找到的内容给出解释。
来自文档,
权重:字符串或无可选(默认='权重')
边属性保存用于边权重的数值。如果无,则所有边权重均为 1。
但这并没有告诉你它对重量的作用,这是你的问题。
您可以找到源代码。如果您发送加权边,它将创建一个邻接矩阵A
有了这些重量并通过A
to _fruchterman_reingold
.
看看那里的代码,它的重点就在这一行
displacement=np.transpose(np.transpose(delta)*\
(k*k/distance**2-A*distance/k)).sum(axis=1)
The A*distance
正在计算作用在节点上的弹簧力有多大。相应的较大值A
进入意味着这两个节点之间存在相对较强的吸引力(或者如果它们非常接近,则排斥力较弱)。然后算法根据力的方向和强度移动节点。然后重复(默认 50 次)。有趣的是,如果你查看源代码,你会注意到t
and dt
。似乎在每次迭代中,力都乘以越来越小的因子,因此步长变得越来越小。
这是一个链接paper描述该算法,不幸的是该算法是在付费墙后面的。这是a link到作者网页上的论文
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)