Skip to main content
 首页 » 编程设计

python之计算大量序列的成对差异矩阵

2025年05月04日15xxx_UU

我想计算一长串序列之间成对差异的数量,并将其放回矩阵形式。

我有几百个基因序列,每个序列都已经对齐并且长度相同(大约 300 个字符)。我不是在寻找一种编辑距离算法(汉明、莱文斯坦等),而是想获得两个序列之间的绝对差异数。必须在每个字符位置比较序列。

例如,

Sequence 1: "GAT-ACA" 
Sequence 2: "AT-GCGA" 
Number of differences: 6 

(破折号是为了对齐序列,我的序列也可能包含破折号)。

是否有使用 python(或其他语言)计算时间短的有效方法?我也在 R 中问了这个问题,最初打算那样做,但结果太慢了,无法应用于数百个序列。

谢谢!

请您参考如下方法:

如果你想计算显示对之间差异的矩阵,你可以这样做:

import numpy as np 
 
def get_difference(x,y): 
    return sum(ele_x != ele_y for ele_x, ele_y in zip(x,y)) 
 
my_list = ['abcde','abcwe','zbfwe'] 
n = len(my_list) 
 
my_array = np.zeros((n,n)) 
# 
for i, ele_1 in enumerate(my_list): 
    for j, ele_2 in enumerate(my_list): 
        if j >= i: 
            break # Since the matrix is symmetrical we don't need to 
                  # calculate everything 
        difference = get_difference(ele_1, ele_2)   
        my_array[i, j] = difference 
        my_array[j, i] = difference 

结果:

>>> my_array 
array([[ 0.,  1.,  3.], 
       [ 1.,  0.,  2.], 
       [ 3.,  2.,  0.]]) 

生成的矩阵(OK 数组)显示了对之间的差异。