优化超大距离矩阵处理W

2024-06-16 11:10:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用clustal omega应用程序生成的非常大的距离矩阵,它涉及到我正在开发的一些生物信息学管道,我遇到了以下问题:

距离矩阵的处理是在某个时间点上自我重复,其中由某一行索引对应的列的索引表示的元素在每个文件中出现两次,例如:位置行(1)-列(2)等于(21.944035),其值与位置行(2)-列(1)中的值完全相同,等等。在

如果我设法避免对文件中的每个元素重复两次处理工作流,那么我可以提高脚本的速度并减少存储结果所需的内存需求。在

这是我的9725x9725空间分隔距离矩阵中的一个非常小的示例,您可以看到元素如何匹配索引的每个唯一位置(不考虑顺序)。在

100.000000 21.944035 22.133939 23.723042 19.750284 20.431328 20.885358 21.679909
21.944035 100.000000 22.827688 21.796760 22.974963 20.324006 21.944035 24.889543
22.133939 22.827688 100.000000 21.152030 22.474032 17.387033 19.830028 20.963173
23.723042 21.796760 21.152030 100.000000 20.437018 24.361493 19.059107 19.436957
19.750284 22.974963 22.474032 20.437018 100.000000 21.414538 20.094259 21.765210
20.431328 20.324006 17.387033 24.361493 21.414538 100.000000 20.432220 20.432220
20.885358 21.944035 19.830028 19.059107 20.094259 20.432220 100.000000 19.018898
21.679909 24.889543 20.963173 19.436957 21.765210 20.432220 19.018898 100.000000

下面是我用python编写的脚本片段,以避免对角线方向的值表示索引本身:

^{pr2}$

我的问题是:如何更改代码以避免文件中稍后出现的相同位置的重新处理?!在


Tags: 文件内存脚本应用程序元素距离管道时间
1条回答
网友
1楼 · 发布于 2024-06-16 11:10:50

这个循环跳过对角线。

for row_idx, row in enumerate(data):
    for col_idx, element in enumerate(row):
        if row_idx == col_idx:
            continue

这个小调整跳过对角线和下面的所有内容(==>=

^{pr2}$

如果不能确定矩阵是否对称,可以添加一个检查:

for row_idx, row in enumerate(data):
    for col_idx, element in enumerate(row):
        if row_idx >= col_idx and data[row_idx][col_idx] == data[col_idx][row_idx]:
            continue

相关问题 更多 >