我正在尝试将字典转换为距离矩阵,然后我可以将其用作层次聚类的输入:我有一个输入:
- 键:长度为 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]])
