Python代码未按预期执行

时间:2015-02-21 08:44:51

标签: python performance numpy

这个Python代码的执行速度是否比第二个版本慢2.5倍?

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),但无济于事。

0 个答案:

没有答案