我正在写更大的程序。 尽快得到3x3矩阵的行列式对其正常工作非常重要。 我在numPy上读过这件事,但是我觉得写我自己的代码可能比CompSci的第三学期更有教育意义。
所以我写了两个函数。 我使用time.clock () (在windows7计算机上) )计算每个函数返回一个值需要多长时间。
这是第一个功能。 defdete(a ) :
x=[ a [0] [0] * a [1] [1] * a [2] [ a [1] [0] * a [2] [1] * a [3] [2] ] [ a [2] [0] * a ]
y=[ a [0] [2] * a [1] [1] * a [2] [0] ] [ a [1] [2] * a [2] [1] * a [3] [0] ] ] [ a [2]
return x - y
这是第二个功能。 defdet(a ) :
a.append(a[0]; a.append(a[1];
x=0
forIinrange(0,Len ) a )-2 ) :
y=1;
forjinrange(0,Len ) a )-2 ) :
y *=a[i j][j]
x =y
p=0
forIinrange(0,Len ) a )-2 ) :
y=1;
z=0;
forjinrange(2,-1,-1) :
y *=a[i z][j]
z=1
z =1
p =y
return x - p
他们给出了正确的答案,但最初似乎更快。 这是因为for循环更优雅,通常使用更快,所以我做错了什么——我觉得循环太慢了,太胖了。 我试着剪了一下,*=和=操作花了太多时间,它们好像太多了。
我还没有检查numPy处理这个问题的速度,但是我想编写更有效率的代码。
有办法让这些循环更快吗?