python hcluster,距离矩阵和浓缩距离矩阵

问题描述:

我使用模块hcluster从距离矩阵计算树状图。我的距离矩阵是这样生成的数组的数组:python hcluster,距离矩阵和浓缩距离矩阵

import hcluster 
import numpy as np 

mols = (..a list of molecules) 
distMatrix = np.zeros((10, 10)) 
    for i in range(0,10):  
    for j in range(0,10): 
     sim = OETanimoto(mols[i],mols[j]) # a function to calculate similarity between molecules 
     distMatrix[i][j] = 1 - sim 

然后我使用命令distVec = hcluster.squareform(distMatrix)到矩阵转换成冷凝矢量和与vecLink = hcluster.linkage(distVec)计算联动矩阵。

所有这一切工作正常,但如果我计算使用距离矩阵,而不是浓缩载体的联动矩阵matLink = hcluster.linkage(distMatrix)我得到一个不同的链接矩阵(节点之间的距离,很多大和拓扑结构略有不同)

现在我不确定这是否是因为hcluster只能用于压缩矢量,或者我在那里犯错误。

感谢您的帮助!

我敲了一个类似于你的快速随机的例子,并遇到同样的问题。 在文档字符串中的确如此:

对浓缩距离矩阵y执行分层/凝聚聚类。 y必须是:数学:{n \choose 2}大小为 向量其中n是距离矩阵中配对的原始观测值 的数量。

但是,仔细查看了代码后,它似乎有意使它与矢量形状和矩阵形代码一起工作: 在hierachy.py中有一个基于矩阵形状的开关。然而 看来,信息的关键位是功能联动的文档字符串:

- Q : ndarray 
     A condensed or redundant distance matrix. A condensed 
     distance matrix is a flat array containing the upper 
     triangular of the distance matrix. This is the form that 
     ``pdist`` returns. Alternatively, a collection of 
     :math:`m` observation vectors in n dimensions may be passed as 
     a :math:`m` by :math:`n` array. 

所以我认为,该接口不允许距离矩阵的传递。 相反,它认为你将它传递给n维的观测向量m。 因此,结果的差异?

这是否合理?

其他只是看看代码本身我相信你可以调试它,并找出你的例子为什么不同。

干杯 马特

+0

马特你好,非常感谢您的回复。听到传递矢量是要走的道路是令人欣慰的。 – 2011-04-20 14:37:55