python计算矩阵行列式_python – 实验确定矩阵行列式的计算复杂性

我需要帮助确定实验中矩阵nxn的行列式的计算复杂性

我的代码:

import numpy as np

import timeit

t0 = time.time()

for n in range(1, 10):

A = np.random.rand(n, n)

det = np.linalg.slogdet(A)

t = timeit.timeit(lambda: det)

print(t)

但是我得到了每个n的相同时间,因此计算复杂度:O(N)不正确,因为它意味着是O(N ^ 3).任何帮助将非常感激.

最佳答案 对于它的价值,任何有意义的基准测试通常需要足够大的N来给计算机一些东西来咀嚼. 10×10矩阵不足以开始看到复杂性.开始抛出100,1000,10000等数字,然后你会看到你的缩放.

例如,如果我稍微修改您的代码

for n in range(1, 14):

t0 = time.time()

p = 2**n

A = np.random.rand(p,p)

det = np.linalg.slogdet(A)

print('N={:04d} : {:.2e}s'.format(p, time.time() - t0))

这导致了

N=0002 : 4.35e-02s

N=0004 : 0.00e+00s

N=0008 : 0.00e+00s

N=0016 : 5.02e-04s

N=0032 : 0.00e+00s

N=0064 : 5.02e-04s

N=0128 : 5.01e-04s

N=0256 : 1.50e-03s

N=0512 : 8.00e-03s

N=1024 : 3.95e-02s

N=2048 : 2.05e-01s

N=4096 : 1.01e+00s

N=8192 : 7.14e+00s

您可以看到,对于非常小的N值,一些小值优化和技巧使得很难看到O()复杂度,但随着N值的增长,您可以开始看到缩放.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值