我需要确定是否有很多不同的Toeplitz矩阵是奇异的。例如,我想精确地计算出有多少12乘12 0-1的Toeplitz矩阵是奇异的。这里有一些代码可以做到这一点。在
import itertools
from scipy.linalg import toeplitz
import scipy.linalg
import numpy as np
n = 12
singcount = 0
for longtuple in itertools.product([0,1], repeat = 2*n-1):
A = toeplitz(longtuple[0:n], longtuple[n-1:2*n-1])
if (np.isclose(scipy.linalg.det(A),0)):
singcount +=1
print singcount
然而,scipy.linalg.det
是一种非常低效的方法。原则上,{a1}更快,但我不知道如何实现它。有人能让我开始吗(或者有更快更好的方法吗)?在
我们需要加速
toeplitz
和det
调用:2**k
批量中工作toeplitz
索引det
是一个通用的ufunc,它可以在一个调用中计算may-det。在代码:
以下是原始代码:
^{pr2}$下面是优化的代码:
以下是时间结果:
我们检查结果:
您可以将速度提高
unpackbits()
:时间是:
以下是n=10的singcount的完整代码:
输出是43892,在我的个人电脑上花了2.15秒
相关问题 更多 >
编程相关推荐