IPython 에서 Python 프로그램 실행 시간 측정 방법

4164 단어 IPythonPython시간.
MATLAB 스 크 립 트 를 쓸 때 저 는 tic,toc 로 프로그램 실행 시간 을 측정 합 니 다.Python 에서 도 가끔 테스트 를 하지만 기본적으로 time 모듈 을 사용 합 니 다.IPython 을 접 한 후 갑자기 프로그램 실행 시간의 테스트 가 이렇게 간단 할 수 있다 는 것 을 알 게 되 었 습 니 다!
IPython 에서 프로그램 실행 시간의 테스트 는 마술 함 수 를 통 해 이 루어 진다.이 기능 의 마술 함 수 는 두 가지 가 있 는데,하 나 는 time 이 고,또 하 나 는 timeit 이다.뒤의 이 기능 은 앞의 기능 과 유사 하지만 더욱 정확 하 다.왜냐하면 테스트 는 여러 차례 테스트 를 통 해 평균 값 을 얻 는 방식 으로 이 루어 졌 기 때문이다.
간단 한 테스트 스 크 립 트 를 썼 는데,

#!/usr/bin/python
 
import numpy as np
from numpy.randomimport randn
 
data = {i :randn() for i in range(7)}
print(data)코드 는 다음 과 같 습 니 다.
IPython 에서 테스트 기록 은 다음 과 같 습 니 다.

In [21]: %time%run dict.py
{0:1.1356172702418055, 1: -0.24725099335195655, 2: -0.8566028472732841, 3:-0.7027863981377108, 4: 0.8563383373116604, 5: 1.4790260114125025, 6:0.45741003038960254}
Wall time: 0 ns
 
In [22]: %time%run dict.py
{0:0.4634308244997993, 1: -0.2169481701227914, 2: 1.844213869777202, 3:-1.09428552819743, 4: -0.3162553722440559, 5: 0.35052990092285824, 6:-1.0779260478165211}
Wall time: 0 ns
이 결 과 는 좀...
확실히 이렇게 간단 한 문 구 는 얼마나 오래 실 행 될 수 있 습 니까?게다가 현재 사용 하고 있 는 공책 은 압축 처리 장치 이자 I7 컴 퓨 팅 최 강 코어 다.자,이제 개조 해서 순환 으로 바 꾸 겠 습 니 다.

#!/usr/bin/python
 
import numpy as np
from numpy.randomimport randn
 
for i inrange(1000):
data = {i : randn() for i in range(7)}
print(data)
이 코드 는 새 파일 에 저 장 된 후 IPython 에서 테스트 와 기록 을 진행 합 니 다.눈앞 에 커 다란 출력 이 스 쳐 지나 가 고 모든 기록 을 복사 하 는 것 은 불가능 합 니 다.캡 처 부분 결 과 는 다음 과 같 습 니 다.

{0:-0.8346562430694008, 1: -0.5081226699243429, 2: 0.14690620427134915, 3:-1.1947018796604227, 4: 0.5299884594565932, 5: -0.11730239691529774, 6:-0.008304349615949396}
{0:-0.5004558540946741, 1: -2.239882398599743, 2: -0.4877611466394901, 3:0.04679029941320335, 4: -0.04061984884439187, 5: -0.18026780798066566, 6:0.2617579789690715}
{0:-0.8498496249579838, 1: -0.34650772255315343, 2: -0.7067822075542513, 3:0.4675343777714329, 4: -2.095049716609193, 5: -1.9396619017424426, 6:1.4723754138476228}
{0:1.0829454562962688, 1: 0.3658593642766029, 2: 0.7825005873884392, 3:-0.7024245957641886, 4: -0.9083494908408439, 5: -0.5225361343604294, 6:0.2780526056846729}
Wall time: 2.67 s
이번 집행 결 과 는 확실히 매우 길다.개인 적 으로 주요 병목 은 역시 수출 기능 에 있 을 것 이 라 고 생각한다!timeit 로 결과 에 큰 변화 가 있 는 지 시험 해 보 세 요.부분 기록 결 과 는 다음 과 같다.

{0:1.1881922773474327, 1: 2.095703415950821, 2: 0.7768251617416795, 3:-0.3639801567794642, 4: -1.2155069020886828, 5: 0.05454831526380187, 6:0.521994301720664}
{0:0.0962573073179745, 1: -0.6917641905037167, 2: 1.021197433972855, 3:0.4155701479521505, 4: 2.393391538898768, 5: 1.3755258048747323, 6:-0.5540780961303758}
{0:-0.418199398478115, 1: 1.1973929026808094, 2: -0.3243683593668846, 3:-1.7765735471011064, 4: -1.1567528174241677, 5: -2.297151750515544, 6:1.6966820033283279}
1 loop, best of 3:1.68 s per loop
위의 결과 에서 알 수 있 듯 이 이 결 과 는 평균 값 을 취 하 는 것 도 아 닌 것 같다.위의 결과 제시 에서 테스트 는 세 번 진행 되 었 고 세 번 에서 가장 좋 은 결 과 를 꺼 냈 다.이전의 결과 와 는 확실히 어느 정도 차이 가 있다.코드 를 다시 수정 해서 print 를 고 쳐 서 print 가 시간 소모 가 많은 가구 인지 확인 하 겠 습 니 다!코드 는 다음 과 같 습 니 다:

#!/usr/bin/python
 
import numpy as np
from numpy.randomimport randn
 
for i inrange(1000):
data = {i : randn() for i in range(7)}
a = data
두 가지 테스트 의 결 과 는 각각 다음 과 같다.
시간 테스트:

In [28]: %time%run dict_loop_no_disp.py
Wall time: 15 ms
In [29]: %timeit%run dict_loop_no_disp.py
100 loops, best of3: 3.2 ms per loop
위의 결 과 를 통 해 알 수 있 듯 이 print 는 확실히 시간 소모 가 많은 가구 입 니 다!이 결과 에서 나 는 timeit 의 출력 에 대한 이해 가 약간 빗 나 간 것 같다.직관 적 으로 지난번 테스트 는 순환 테스트 가 1 번 밖 에 없 었 던 것 같 지만 세 가지 가장 좋 은 성적 을 거 두 었 다.이번 테스트 는 100 개의 순환 을 거 쳐 세 개의 가장 좋 은 성적 을 거 두 었 다?이렇게 이해 하 는 건 가요?
어떻게 이해 하 는 지 는 잠시 깊이 연구 하지 않 겠 습 니 다.전체적으로 말 하면 뒤의 정확 한 것 일 뿐 입 니 다!실제 사용 에 있어 서 사용 할 때 는 많 지 않 습 니 다.왜냐하면 제 Python 프로그램 은 실행 시간 이 적어 서 거의 무시 할 수 있 습 니 다.
이상 IPython 에서 Python 프로그램 실행 시간 을 측정 하 는 방법 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.참고 가 되 고 많은 응원 부탁드립니다.

좋은 웹페이지 즐겨찾기