스크립트를 작성하는 동안 numpy.random.choice 기능을 발견했습니다. 동일한 if 문보다 훨씬 깔끔하기 때문에 구현했습니다. 그러나 스크립트를 실행 한 후에는 인데, if 문보다 느리게입니다.random.choice가 왜 그렇게 느린가요?
다음은 MWE입니다. 첫 번째 방법은 0.0 초, 두 번째 방법은 7.2 초가 소요됩니다. i 루프를 확장하면 random.choice가 얼마나 빨리 속도가 느려지는지 알 수 있습니다.
누구든지 random.choice가 왜 그렇게 느린 지에 대해 의견을 말할 수 있습니까?
import numpy as np
import numpy.random as rand
import time as tm
#-------------------------------------------------------------------------------
tStart = tm.time()
for i in xrange(100):
for j in xrange(1000):
tmp = rand.rand()
if tmp < 0.25:
var = 1
elif tmp < 0.5:
var = -1
print('Time: %.1f s' %(tm.time() - tStart))
#-------------------------------------------------------------------------------
tStart = tm.time()
for i in xrange(100):
for j in xrange(1000):
var = rand.choice([-1, 0, 1], p = [0.25, 0.5, 0.25])
print('Time: %.1f s' %(tm.time() - tStart))
그건 정말 공정한 비교가 아닙니다. 매번 numpy는 p 목록의 누적 합계를 가져와 새 벡터에 넣은 다음 반복합니다. 세 개의 변수 만 있고 첫 번째와 세 번째의 합이 .5라는 사실을 알면 효과적으로 사전 처리를 수행 할 수 있습니다. 그 외에도 numpy는 벡터화 된 연산에 최적화되어 있으며 수천 번의 단일 연산 만 수행하는 것이 아닙니다. –
또한 'timeit'을 사용하지 말고'time'을 사용하십시오. – Marcin