np.sum
은 스칼라를 반환합니다. np.abs
동일한 크기의 새 배열을 반환합니다. 새로운 배열에 대한 메모리 할당은 여기에서 가장 많은 시간을 차지합니다.
>>> timeit("np.abs(a)", "import numpy as np; a = np.random.rand(10000000)", number=100)
3.565487278989167
>>> timeit("np.abs(a, out=a)", "import numpy as np; a = np.random.rand(10000000)", number=100)
0.9392949139873963
out=a
이 NumPy와가 이전 데이터를 덮어 쓰기, 같은 배열 a
에 결과를 넣어 알 인수를 비교. 따라서 속도 향상.
>>> timeit("np.sum(a)", "import numpy as np; a = np.random.rand(10000000)", number=100)
0.6874654769926565
하지만 많은 쓰기 메모리 액세스를 필요로하지 않습니다
합계는 약간 빠른 아직도있다.
a를 덮어 쓰지 않으려면 같은 유형 및 크기의 배열 abs
을 반복적으로 가져와야한다고 가정하고 abs
의 출력을 위해 다른 배열을 제공하는 것이 좋습니다. 참고로 np.linalg(a, 1)
, np.linalg의 절반 시간
b = np.empty_like(a) # done once, outside the loop
np.abs(a, out=b)
np.sum(b)
실행 abs(x)
새로운 어레이에 대한 메모리 할당을 포함
add.reduce(abs(x), axis=axis, keepdims=keepdims)
같은 L1 놈을 계산한다. 이상적
은 RAM 모든 출력을 이동 한 후 합계를 검색하지 않고 모두 절대 값 (또는 다른 "ufunc」의 결과)의 (최대 또는 최소 또는) 합을 계산하는 방법이 될/최대/최소 NumPy 레포에 대한 논의가있었습니다. 가장 최근에는
add a max_abs ufunc 이었지만 구현에 도달하지 못했습니다.
ufunc.reduce
방법 add
또는 logaddexp
같은 두 개의 입력을 갖는 함수를 사용할 수 있지만로 감소 할 addabs
함수 (x, y : x+abs(y)
)는 없다.
출처
2017-10-01 13:36:36
FTP
분기 예측으로 인해 발생 가능성이 높음 - https://stackoverflow.com/questions/11227809/why-is-it-faster-to-process-a-sorted-array-than-an-unsorted-array – Maxim
' 내가 입력 배열을 정렬 할 때 어떤 속도 향상을 보여줍니다. – Lugi