2014-04-26 2 views
0

는 파이썬에서 다음 예제를 가지고 :파이썬 함수가 입력 매개 변수를 함수에 복사합니까?

import numpy as np 
import timeit 

# array size 
m = 3000 

# square array 
a = np.random.rand(m, m) 

# column vector 
b = np.random.rand(m) 

# solve 
ti = timeit.default_timer() 
x = np.linalg.solve(a, b) 
tf = timeit.default_timer() 

# solve function 
def solver(a, b): 
    x = np.linalg.solve(a, b) 
    return x 

tii = timeit.default_timer() 
x = solver(a, b) 
tff = timeit.default_timer() 

print('time1 ', tf-ti) 
print('time2 ', tff-tii) 

함수 (TIME2)를 사용하여 대 기능 (시간 1)를 사용하지 않는 시간 비교는 다음과 같습니다

time1 0.6199771239989786 
time2 0.5945519460001378 

이 약간있는 것으로 보인다 두 접근법의 차이점. 입력 매개 변수는 함수 solver에 대해 어떻게 처리 되었습니까? 아니면 복사 되었습니까? 아니면 함수의 내부로 전달 되었습니까?

+1

반대 순서로 테스트를 실행하면 어떤 타이밍이 발생합니까? – AShelly

+0

@AShelly 물론 흥미 롭습니다. 역순으로 테스트를 실행하면 – wigging

+0

오 그래요. 추가 기능 호출 없이는 느려집니다 .-) 물론 첫 번째 호출 전에 수행 할 초기화가 있습니다. – Daniel

답변

1

ab 내용의 메모리 캐싱으로 인해 에 대한 두 번째 호출의 속도 차이가 발생할 가능성이 높습니다.

그리고 질문에 대답하기 위해 파이썬의 객체는 참조로 전달되므로 인자를 전달하는 비용의 유일한 차이점은 두 번째 예제에서 두 번 수행한다는 것입니다. 그러나 그것은 아마도 해결 비용의 아주 작은 부분 일 것입니다.

+0

여기 flameware가 필요합니다 :) – pepr

+0

큰 프로젝트의 경우 다른 파일에 선언 된 함수에 데이터를 전달해도 동일한 파일의 모든 작업을 수행하는 것과 비교하여 전반적인 계산 시간에 영향을주지 않아야합니다. – wigging

+0

@ Gavin 맞습니다. – Veedrac