Skip to main content
 首页 » 编程设计

python之将距离对转换为距离矩阵以用于层次聚类

2025年05月04日13mfrbuaa

我正在尝试将字典转换为距离矩阵,然后我可以将其用作层次聚类的输入:我有一个输入:

  • 键:长度为 2 的元组与我有距离的对象
  • value:实际距离值

    for k,v in obj_distances.items(): 
    print(k,v) 
    

结果是:

('obj1', 'obj2') 2.0  
('obj3', 'obj4') 1.58 
('obj1','obj3') 1.95 
('obj2', 'obj3') 1.80 

我的问题是如何将其转换为距离矩阵,以便稍后在 scipy 中用于聚类?

请您参考如下方法:

使用 pandas 和 unstack 数据帧:

import pandas as pd 
 
data = {('obj1', 'obj2'): 2.0 , 
('obj3', 'obj4'): 1.58, 
('obj1','obj3'): 1.95, 
('obj2', 'obj3'): 1.80,} 
 
df = pd.DataFrame.from_dict(data, orient='index') 
df.index = pd.MultiIndex.from_tuples(df.index.tolist()) 
dist_matrix = df.unstack().values 

产量

In [15]: dist_matrix 
Out[15]: 
 
array([[2.  , 1.95,  nan], 
       [ nan, 1.8 ,  nan], 
       [ nan,  nan, 1.58]])