나는 NumPy가 싫어요
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴, 데이터 분석
대상자
- *중급 이상의 파이썬 개발자 및 데이터 과학자**
- NumPy의 한계와 대안에 대한 이해가 필요한 사람들
- 배열 연산이 복잡한 고차원 데이터를 다루는 개발자
- 배열 언어의 추상화와 명확성에 관심 있는 사람
핵심 요약
- NumPy의 배열 연산은 명확성과 추상화 측면에서 부족하며, 고차원 배열 처리 시 복잡성과 혼란이 급증함
- 브로드캐스팅 및 고급 인덱싱은 문맥에 따라 예측 불가능하며, 문서와 예제만으로 명확히 이해하기 어려움
- einsum 과 같은 도메인 특화 언어는 고차원 연산을 명확하게 처리할 수 있지만, 일부 함수(예:
linalg.solve
)에서는 지원되지 않음
섹션별 세부 요약
###NumPy의 한계
- 간단한 배열 연산은 NumPy로 쉽게 가능하지만, 차원이 증가하면 복잡성과 혼란 증가
- 브로드캐스팅은 암묵적인 연산으로, 코드 가독성 저하 및 오류 가능성 증가
- 고급 인덱싱은 결과 shape 예측이 어렵고, 문서가 복잡하여 학습 과정에서 많은 시간 소모
###NumPy의 설계와 추상화 문제
- 명시적인 축 지정 대신 추측과 시행착오에 의존해야 하며, 명확한 이론 부족
- 함수별 차원 처리 방식이 일관되지 않음 → 재사용과 추상화 원칙에 역행
- numpy.linalg.solve 등 특정 함수는 고차원 배열에 대한 사용법이 모호
###대안과 개선 방향
- Xarray는 차원 이름을 사용하여 명확한 브로드캐스팅과 인덱싱 가능 → 3차원 이상의 데이터 처리 시 생산성 향상
- einsum은 고차원 연산을 명확하게 처리 가능하지만, 일부 함수에서는 사용 불가
- 개선된 배열 언어에 대한 프로토타입 개발 계획 있음 → 추후 글에서 자세히 설명
###NumPy 대비 Julia, MATLAB 등 다른 언어의 장단점
- Julia는 벡터화와 루프 모두 명확하게 처리 가능 → 가독성과 성능 모두 우수
- MATLAB은 3차원 이상 배열 지원 약함 → NumPy와 유사한 문제 발생 가능성
- Python 생태계는 라이브러리 간 비표준 API로 인해 데이터 변환 시간 증가 → array-api 프로젝트로 표준화 노력 중
결론
- NumPy는 고차원 배열 및 복잡한 연산에 있어 명확성과 추상화 부족으로 인해 많은 문제를 유발
- Xarray, einsum, Julia 등 대안 언어와 라이브러리 사용을 고려해야 하며, NumPy의 개선을 위한 새로운 배열 언어 API 개발 필요
- 고차원 배열 처리 시 명시적인 축 지정과 명확한 연산 의도 표현이 필수적