python从字典数据计算距离矩阵
我想从字典数据计算距离矩阵,如下所示:python从字典数据计算距离矩阵,python,cluster-analysis,distance,linkage,pdist,Python,Cluster Analysis,Distance,Linkage,Pdist,我想从字典数据计算距离矩阵,如下所示: y = {"a": ndarray1, "b": ndarry2, "c": ndarry3} 每个键(“a”、“b”、“c”)的值都是大小不同的np.ndarry。我有一个dist()函数,可以通过dist(y[“a”],y[“b”])计算y[“a”]和y[“b”]之间的距离 由此得出的距离矩阵为: +----------------------------------------------------------------+ |
y = {"a": ndarray1, "b": ndarry2, "c": ndarry3}
每个键(“a”、“b”、“c”)的值都是大小不同的np.ndarry。我有一个dist()
函数,可以通过dist(y[“a”],y[“b”])
计算y[“a”]
和y[“b”]
之间的距离
由此得出的距离矩阵为:
+----------------------------------------------------------------+
| a b c |
+----------------------------------------------------------------+
| a | 0 mydist(ndarrya1, ndarray) mydist(ndarray1, ndarray3) |
| b | 0 mydist(ndarray2, ndarray3) |
| c | 0 |
+----------------------------------------------------------------+
我用pdist(y,mydist)
尝试了scipy.space.distance.pdist
,但出现了一个错误:
[X] = _copy_arrays_if_base_present([_convert_to_double(X)])
File "/usr/local/lib/python2.7/dist-packages/scipy/spatial/distance.py", line 113, in _convert_to_double
X = X.astype(np.double)
TypeError: float() argument must be a string or a number
谁能告诉我如何自己实现这个pdist?我想使用pdist结果进行进一步的层次聚类。问题的第一部分非常清楚。第二部分我不知道你在问什么。为什么需要重新实现
scipy.space.distance.pdist
,我以为您已经有了一个dist()
函数来计算成对距离
要获得成对距离,当您已经有一个dist()
函数来计算它时:
In [69]:
D={'a':some_value,'b':some_value,'c':some_value}
In [70]:
import itertools
In [71]:
list(itertools.combinations(D,2))
Out[71]:
[('a', 'c'), ('a', 'b'), ('c', 'b')]
In [72]: #this is what you need:
[dist(*map(D.get, item)) for item in itertools.combinations(D,2)]
似乎就是我要找的。(1) 如何将我的条目名称(“a”、“b”)与上述生成的dm中的条目值相关联。因为dm应该是[1,2,3],所以我想知道dm[3]是从dist(“b”,“c”)获得的。我认为pdist()可能能够提供。类似于[1,2,3]的dm不能传递由scipy.spatial.distance包提供的is\u valid\u y()函数。(2) 你最后一行中“*”的意思是什么。dist()函数需要两个输入值“a”和“b”,但上面的代码试图将其与一个输入值(a,b)一起使用,是否有快速解决方案?我可以改变我的功能。