我正在编写一个更大的程序,尽可能快地获得3x3矩阵的决定因素对于它的正常运行非常重要。我读过我可以使用numPy来做到这一点,但我认为编写自己的代码会更具教育性,因为我在CompSci的第三学期。
所以我写了两个函数,我使用time.clock()(我在win7机器上)来计算每个函数返回一个值需要多长时间。
这是第一个功能:
def dete(a):
x = (a[0][0] * a[1][1] * a[2][2]) + (a[1][0] * a[2][1] * a[3][2]) + (a[2][0] * a[3][1] * a[4][2])
y = (a[0][2] * a[1][1] * a[2][0]) + (a[1][2] * a[2][1] * a[3][0]) + (a[2][2] * a[3][1] * a[4][0])
return x - y这是第二个功能:
def det(a):
a.append(a[0]); a.append(a[1]);
x = 0
for i in range(0, len(a)-2):
y=1;
for j in range(0, len(a)-2):
y *= a[i+j][j]
x += y
p = 0
for i in range(0, len(a)-2):
y=1;
z = 0;
for j in range(2, -1, -1):
y *= a[i+z][j]
z+=1
z += 1
p += y
return x - p他们都给出了正确的答案,但是第一个看起来稍微快一点,这让我认为由于for循环使用更优雅,通常速度更快,所以我做错了一些事情 - 我让循环太慢而且肥胖。我试着修剪它,但似乎* =和+ =操作花费了太多时间,其中太多了。
我还没有检查numPy处理这个问题的速度有多快,但是我想在编写高效的代码方面做得更好。
任何想法如何使这些循环更快?