我是新來的Python,我正在尋找一個天真的,簡單的單鏈接聚類python算法的示例,該算法基於創建鄰近矩陣並從中刪除節點。我知道有些包如numpy,但我寧願避免它們。
我已經在網上搜索,但找不到任何足夠簡單的代碼,以便能夠理解,以便以後自己複製它。Python:單鏈接聚類算法
與具有不相交的聚類水平L(0)= 0和序列數m = 0
開始查找最相似的集羣對在當前的聚類,說一對(R),(S),根據d [(r),(s)] = min d [(i),(j)],其中最小值在當前聚類的所有聚類對上。
遞增序列號: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 = {「Human」:「MGDVEKGKKIFIMKCSQCHTVEKGGKHKTGPNLHG」,「黑猩猩」:「MGDVEKGKKIFIMKCSQCHTVEKGGKHK TGPNLHG 「 」西部眼鏡猴「: 」MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGXNLHG「, 」鼠標「: 」MGDAEAGKKIFVQKCAQCHTVEKGGKHKTGPNLWG「, 」兔子「: 」MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLHG「, 」狗「: 」MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLHG「, 」豬八戒「: 」MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLHG「, 」鱷龜「:」 MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLNG」, 「鱷魚」: 「MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLHG」, 「蜜蜂」: 「AGDPEKGKKIFVQKCAQCHTIESGGKHKVGPNLYG」,}
這個問題似乎是題外話,因爲它是示例代碼 – jonrsharpe
對不起的請求,我也做了第一部分我自己,創造了矩陣,但不知道如何從那裏rpoceed。有沒有更好的方式來重述它? –
@kapoios_kanateris既然你已經寫過這個問題的解決方案的一部分,你應該把它發佈在這個頁面上。然後我們可以弄清楚還需要做些什麼。 –