backTrack = np.zeros((len(v)+1, len(w)+1), dtype = int)
s = np.zeros((len(v)+1, len(w)+1), dtype = int)
# Fill in the 's' matrix.
for i in range(1, len(v)+1):
for j in range(1, len(w)+1):
scores = [s[i-1, j] - sigma, s[i, j-1] - sigma, s[i-1, j-1] + [-1, 1][v[i-1] == w[j-1]]]
s[i, j] = max(scores)
backTrack[i, j] = scores.index(s[i, j])
第二位:
S = [[0 for j in range(len(w)+1)] for i in range(len(v)+1)]
backtrack = [[0 for j in range(len(w)+1)] for i in range(len(v)+1)]
# Fill in the Score and Backtrack matrices.
iterations = 0
for i in range(1, len(v)+1):
for j in range(1, len(w)+1):
scores = [S[i-1][j] - sigma, S[i][j-1] - sigma, S[i-1][j-1] + [-1, 1][v[i-1] == w[j-1]]]
S[i][j] = max(scores)
backtrack[i][j] = scores.index(S[i][j])
唯一的区别是,在第一个版本中,数组是通过numpy声明的,而在第二个版本中,它们只是Python的列表列表。
对于那些感兴趣的人来说,这是一个字符串对齐位代码。此外,len(v)和len(w)只有不到10,000,所以循环大约有8500万次。
我尝试过使用numpy数组的不同数据类型(例如int32,int64,float),但无济于事。