복문은 상대적으로 매우 느리므로 일반적으로 배열 연산으로 대체한다. 다음은 염두에 두면 좋
은 간략한 팁이다.
●
파이썬 반복문과 조건문을 배열 연산과 불리언 배열 연산으로 변환한다.
●
가능하면 브로드캐스팅을 사용한다.
●
배열의 뷰(슬라이스)를 사용해서 데이터를 복사하는 것을 피한다.
●
ufunc
메서드를 활용한다.
NumPy
만으로 원하는 성능을 이끌어내지 못한다면 코드를
C
나 포트란으로 작성하거나 아니
면
Cython
을 사용해서 성능을 높일 수 있다. 나는 개인적으로
Cython
을 자주 사용하는데 최
소한의 개발 노력으로 쉽게
C
수준의 성능을 이끌어낼 수 있다.
A.9.1
인접 메모리의 중요성
이 주제에 대한 전체 내용은 이 책의 범위를 벗어나는데, 어떤 애플리케이션에서는 배열이 메모
리상에 배치된 모양에 따라 연산 속도에 많은 영향을 끼친다. 이는 부분적으로
CPU
의 캐시 구
조에 의한 성능 차이에 기반하는데 연속된 메모리에 접근하는 연산(예를 들어
C
순서로 저장된
배열에서 로우를 합산하는)의 경우 메모리 서브시스템이 적절한 메모리 블록을 매우 빠른
CPU
의
L1
이나
L2
에 저장하게 되므로 가장 빠르다. 또한
NumPy
의
C
코드 기반 내부의 어떤 코드
는 연속된 메모리일 경우 최적화되어 인접하지 않은 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month, and much more.