2016-11-19 5 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