【发布时间】:2014-03-13 22:52:08
【问题描述】:
我是 Python 新手,我正在寻找一个基于创建邻近矩阵并从中删除节点的简单、简单的单链接聚类 Python 算法的示例。我知道有 numpy 之类的软件包,但我宁愿避免使用它们。
我在网上搜索过,但找不到任何简单到能够理解以便以后自己复制的代码。
从级别 L(0) = 0 且序列号 m = 0 的不相交聚类开始。
根据d[(r),(s)] = min d[(i),(j)] 找到当前聚类中最相似的聚类对,比如pair (r), (s)最小值在当前聚类中的所有聚类对上。
增加序列号:m = m + 1。将簇(r)和(s)合并为一个簇,形成下一个簇m。将此聚类的级别设置为 L(m) = d[(r),(s)]
通过删除与集群 (r) 和 (s) 对应的行和列并添加与新形成的集群对应的行和列来更新邻近矩阵 D。新集群之间的接近度,表示为 (r,s) 和旧集群 (k) 定义为 d[(k), (r,s)] = min d[(k),(r)], d[( k),(s)]。
如果所有对象都在一个集群中,请停止。否则,请转到第 2 步。
这些是维基百科中描述的步骤。我已经创建了距离矩阵,但不确定如何在那里进行。
这是我目前所拥有的:
比较
def comparison(protein1, protein2):
l = [i for i in range(len(protein1)) if protein1[i] != protein2[i]]
return len(l)
创建矩阵
def matrix (r1,r2):
r = []
for p1 in proteins:
r2 = []
for p2 in proteins:
r2 += [comparison(p1, p2)]
r += [r2]
return r
这些是我要比较的序列:
seqlist = { “人”: “MGDVEKGKKIFIMKCSQCHTVEKGGKHKTGPNLHG”, “黑猩猩”: “MGDVEKGKKIFIMKCSQCHTVEKGGKHKTGPNLHG”, “西部眼镜猴”: “MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGXNLHG”, “鼠标”: “MGDAEAGKKIFVQKCAQCHTVEKGGKHKTGPNLWG”, “兔子”: “MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLHG”, “狗” :“MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLHG”,“猪”:“MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLHG”,“鳄龟”:“MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLNG”,“鳄鱼”:“MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLHG”,“蜜蜂”,“AGGHKGKKVGPNV”
【问题讨论】:
-
这个问题似乎是题外话,因为它是对示例代码的请求
-
对不起,我自己完成了第一部分,创建了矩阵,但不知道如何从那里开始。有没有更好的改写方式?
-
@kapoios_kanateris 因为你已经写了这个问题的部分解决方案,你应该把它贴在这个页面上。然后我们就可以弄清楚还需要做什么。
-
刚刚添加了我到目前为止所做的一切。