Search
🔵

bc4.2.1. title: numba 는 린한 방법이지만 사용할 수 있는 컨테이너, 클래스, 함수 등 제약이 많아서 복잡한 프로그램에서는 사용하기 어렵다.

생성
🚀 prev note
🚀 next note
♻️ next note
14 more properties
numba 는 간단히 python 함수를 래핑해서 사용할 수 있다는 장점이 있지만(from1), 래핑할 수 있는 python 함수의 제약이 크다. 온전한 성능 향상을 위해서는 함수 전체를 컴파일 가능한 형태로 작성해 주어야 하는데(참고2), 안되는 것이 너무 많아 답답하다. 예를 들어, sorted() 함수의 key 파라미터도 사용할 수 없다(참고1). 차라리 진짜 C로 작성하는 것이 더 낫다고 생각이 들 때도 있다.
예를 들어, 아래 스크립트에서 get_intersection_points() 함수는 리스트를 반환하는 함수라고 쳐 보자.
def get_intersection_points(polygon_1, polygon_2): points_intersection = [] for i in range(len(polygon_1)): p1, p2 = polygon_1[i], polygon_1[(i + 1) % len(polygon_1)] for j in range(len(polygon_2)): p3, p4 = polygon_2[j], polygon_2[(j + 1) % len(polygon_2)] points_intersection = get_intersection_points(p1, p2, p3, p4) for point in points_intersection: if point not in points_intersection: points_intersection.append(point) return points_intersection
Python
복사
python 에서 빈 리스트의 경우 for 문을 실행하지 않도록 위와 같은 같은 제어 흐름을 작성하는 일은 매우 흔한 일이다. 여기서 나는 get_intersection_points() 함수의 연산이 너무 무겁기 때문에 numba 데코레이션하여 사용하려고 한다.
하지만 numba 로 컴파일된 함수는 애석하게도 비어있는 리스트를 자유롭게 반환하지 못한다. 그러면 위와 같은 프로그램을 작성할 수 없게 된다. 위와 같은 스크립트에서 비어 있는 리스트를 처리하는 로직을 별도로 분리해야 한다고 생각해 보자. 스크립트가 파이썬스럽지 못하게 되고, 오히려 파이썬 코드를 읽는 사람에게 이해되지 않는 지저분한 코드가 될 수 있다.
parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료들.
1.
None
from : 과거의 어떤 생각이 이 생각을 만들었는가?
supplementary : 어떤 새로운 생각이 이 문서에 작성된 생각을 뒷받침하는가?
1.
opposite : 어떤 새로운 생각이 이 문서에 작성된 생각과 대조되는가?
1.
None
to : 이 문서에 작성된 생각이 어떤 생각으로 발전되고 이어지는가?
1.
None
참고 : 레퍼런스