Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python从字典数据计算距离矩阵_Python_Cluster Analysis_Distance_Linkage_Pdist - Fatal编程技术网

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)一起使用,是否有快速解决方案?我可以改变我的功能。