2016-11-19 6 views
4
私は

は実験的に決定行列の複雑さを計算する決定

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)であるために正しくない。どんな助けでも大歓迎です。

答えて

2

意味をなさないベンチマークでは、通常、コンピュータに何か噛み付かせるために十分大きなNが必要です。 10x10の行列は複雑さを感じるほど大きくはありません。 100,1000,10000などの数値を投げ始めると、スケーリングが表示されます。

例えば、私は少しあなたがNの非常に小さな値のためにそれを見ることができます。これは、

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 

になり、あなたのコード

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)) 

を変更した場合、いくつかの小さな値の最適化やトリックは、ハードそれを作ります複雑さはO()と表示されますが、Nの値が大きくなるにつれて、スケーリングが開始されます。

+0

「N = 2」が「遅い」という理由は何ですか? – mitoRibo

関連する問題