我想知道如何spring_layout考虑边缘重量。来自维基百科,
“另一种模型考虑每对节点 (i,j) 的类似弹簧的力,其中每个弹簧的理想长度 delta_{ij} 与节点 i 和 j 之间的图论距离成正比,而不使用单独的排斥力。最小化节点之间的欧几里得距离和理想距离之间的差异(通常是平方差)相当于度量多维缩放问题。
具体来说,边缘权重是如何考虑的?
这不是一个很好的答案,但它提供了基础知识。其他人可能会真正了解 Fruchterman-Reingold 算法并能描述它。我根据我在代码中找到的内容给出解释。
\n从文档来看,
\n\n\n权重:字符串或无可选(默认=\xe2\x80\x99weight\xe2\x80\x99)
\n
\n\n边属性保存用于边权重的数值。如果无,则所有边权重均为 1。
\n
但这并没有告诉你它对重量的作用,这是你的问题。
\n你可以找到源代码。如果您发送加权边,它将A使用这些权重创建一个邻接矩阵并传递A给_fruchterman_reingold.
看看那里的代码,它的重点就在这一行
\ndisplacement=np.transpose(np.transpose(delta)*\\\n (k*k/distance**2-A*distance/k)).sum(axis=1)\nRun Code Online (Sandbox Code Playgroud)\n正在A*distance计算作用在节点上的弹簧力的强度。相应条目中的值较大A意味着这两个节点之间存在相对较强的吸引力(或者如果它们非常接近,则排斥力较弱)。然后算法根据力的方向和强度移动节点。然后重复(默认 50 次)。有趣的是,如果您查看源代码,您会注意到 at和dt。似乎在每次迭代中,力都乘以越来越小的因子,因此步长变得越来越小。
这是描述该算法的论文的链接,不幸的是该论文位于付费墙后面。这是作者网页上论文的链接
\n| 归档时间: |
|
| 查看次数: |
2916 次 |
| 最近记录: |