我想計算輸入序列和序列中短片段之間的相似度。結果是一個相似度矩陣,每個位置都是對齊的分數。它可以工作,但不幸的是很慢。我如何更有效地在python和numpy中實現循環?我也在考慮使用MPI,但多線程或甚至更好的內部numpy解決方案將是有益的。以下是代碼。Biopython for similarity matrix - 尋找更好的性能
from Bio import pairwise2
import numpy
....
similarityMatrix = numpy.zeros(shape=(sequenceLength-fragmentLength,sequenceLength-fragmentLength))
for i in xrange(sequenceLength-fragmentLength):
currentFragment = sequence[i:i+fragmentLength]
for j in xrange(i,sequenceLength-fragmentLength):
aFragment = sequence[j:j+fragmentLength]
alns = pairwise2.align.globalds(aFragment, currentFragment, matrix, gap_open, gap_extend)
bestHit = alns[0]
score = bestHit[2]
similarityMatrix[i,j] = float(score)
similarityMatrix[j,i] = float(score)
你真正在做的是本地對齊。爲此,您需要Smith-Waterman算法。 – wasserfeder 2014-10-01 03:51:19
我想幫忙,但我不明白你想達到什麼目的。無論如何,你的代碼可以使用pypy獲益很多。試試吧,你不需要改變任何東西。如果您需要更多幫助,請使用示例更新您的問題。 – tbrittoborges 2014-10-01 10:43:55
@wasserfeder。是的,這是本地調整,我對矩陣感興趣,而不是調整結果。但在Biopython中,我沒有返回矩陣的函數 - 因此我想自己生成它... – 2014-10-01 16:31:44