擅长:python、mysql、java
<p>另一种方法是使用所谓的特征向量相似性。基本上,计算每个图的邻接矩阵的拉普拉斯特征值。对于每个图,找到最小的<em>k</em>,使得<em>k</em>最大特征值之和构成所有特征值之和的至少90%。如果两个图之间的<em>k</em>值不同,则使用较小的一个。相似度量是图之间最大特征值之间的平方差之和。这将产生一个在[0,∞范围内的相似性度量,其中接近零的值更相似。</p>
<p>例如,如果使用<code>networkx</code>:</p>
<pre><code>def select_k(spectrum, minimum_energy = 0.9):
running_total = 0.0
total = sum(spectrum)
if total == 0.0:
return len(spectrum)
for i in range(len(spectrum)):
running_total += spectrum[i]
if running_total / total >= minimum_energy:
return i + 1
return len(spectrum)
laplacian1 = nx.spectrum.laplacian_spectrum(graph1)
laplacian2 = nx.spectrum.laplacian_spectrum(graph2)
k1 = select_k(laplacian1)
k2 = select_k(laplacian2)
k = min(k1, k2)
similarity = sum((laplacian1[:k] - laplacian2[:k])**2)
</code></pre>