NumPy의 수학 함수가 Python보다 빠릅니까?
기본 수학 함수 (abs, cosh, sinh, exp, ...)의 조합으로 정의 된 함수가 있습니다.
그것은 예를 들어, 사용 (속도) 차이가 있는지 나는 궁금 numpy.abs()
대신 abs()
?
타이밍 결과는 다음과 같습니다.
lebigot@weinberg ~ % python -m timeit 'abs(3.15)'
10000000 loops, best of 3: 0.146 usec per loop
lebigot@weinberg ~ % python -m timeit -s 'from numpy import abs as nabs' 'nabs(3.15)'
100000 loops, best of 3: 3.92 usec per loop
numpy.abs()
abs()
Numpy 배열도 처리하기 때문에 속도가 느립니다 . 이러한 유연성을 제공하는 추가 코드가 포함되어 있습니다.
그러나 Numpy 는 배열에서 빠릅니다.
lebigot@weinberg ~ % python -m timeit -s 'a = [3.15]*1000' '[abs(x) for x in a]'
10000 loops, best of 3: 186 usec per loop
lebigot@weinberg ~ % python -m timeit -s 'import numpy; a = numpy.empty(1000); a.fill(3.15)' 'numpy.abs(a)'
100000 loops, best of 3: 6.47 usec per loop
(추신 : '[abs(x) for x in a]'
Python 2.7에서 더 map(abs, a)
느린 것보다 더 느립니다. 약 30 % 더 빠릅니다. 여전히 NumPy보다 훨씬 느립니다.)
따라서 numpy.abs()
1 개의 단일 플로트보다 1000 개의 요소에 더 많은 시간이 걸리지 않습니다!
numpy의 유형을 처리하려면 numpy 함수를 사용하고 일반 Python 유형을 처리하려면 일반 Python 함수를 사용해야합니다.
최악의 성능은 일반적으로 유형 변환으로 인해 Python 내장 기능을 numpy와 혼합 할 때 발생합니다. 이러한 유형 변환은 최근에 최적화되었지만 여전히 사용하지 않는 것이 좋습니다. 물론 마일리지는 다를 수 있으므로 프로파일 링 도구를 사용하여 알아 내십시오.
또한 프로그램을 더욱 최적화하려면 cython과 같은 프로그램을 사용하거나 C 모듈을 만드는 것을 고려하십시오. 또는 공연이 중요 할 때 파이썬을 사용하지 않는 것을 고려하십시오.
그러나 데이터가 numpy 배열에 들어가면 numpy가 데이터 묶음을 계산하는 데 정말 빠를 수 있습니다.
사실, numpy 배열에서
를 통한 내장 abs
호출 numpy의 구현 __abs__
은 왜 abs와 같은 내장 함수가 numpy 배열에서 작동합니까?를 참조하십시오 .
따라서 이론적으로 성능 차이가별로 없어야합니다.
import timeit
x = np.random.standard_normal(10000)
def pure_abs():
return abs(x)
def numpy_abs():
return np.absolute(x)
n = 10000
t1 = timeit.timeit(pure_abs, number = n)
print 'Pure Python abs:', t1
t2 = timeit.timeit(numpy_abs, number = n)
print 'Numpy abs:', t2
Pure Python abs: 0.435754060745
Numpy abs: 0.426516056061
참조 URL : https://stackoverflow.com/questions/3650194/are-numpys-math-functions-faster-than-pythons
'developer tip' 카테고리의 다른 글
자바 스크립트에서 HTML 요소의 스타일 값을 얻는 방법은 무엇입니까? (0) | 2020.12.24 |
---|---|
Django : 템플릿에서 매개 변수를 포함한 현재 페이지의 URL 가져 오기 (0) | 2020.12.24 |
줄 번호 정보와 함께 gcc를 사용하여 C ++에 대한 스택 추적을 얻는 방법은 무엇입니까? (0) | 2020.12.24 |
서버 전략에서 데이터를 캐시하기위한 클라이언트 (iOS)의 핵심 데이터 (0) | 2020.12.24 |
C ++ cout이 과학적 표기법을 사용하지 않도록하는 방법 (0) | 2020.12.24 |