Pandas 적용과 np.Vectorize의 성능 비교
np.Vectorize()가 df보다 훨씬 빠를 수 있다는 것이 관찰되었습니다. Pandas DataFrame의 기존 열을 기반으로 새 열을 생성할 때 apply()를 사용합니다. 관찰된 성능 차이는 이 두 가지 방법이 사용하는 기본 메커니즘에서 비롯됩니다.
df.apply() 대 Python 수준 루프
df.apply()는 본질적으로 다음을 생성합니다. DataFrame의 각 행을 반복하는 Python 수준 루프입니다. 제공된 벤치마크에서 볼 수 있듯이 목록 이해 및 지도와 같은 Python 수준 루프는 모두 실제 벡터화된 계산에 비해 상대적으로 느립니다.
np.Vectorize() 대 df.apply()
np.Vectorize()는 사용자 정의 함수를 범용 함수(ufunc)로 변환합니다. Ufuncs는 고도로 최적화되어 있으며 C 기반 코드와 최적화된 알고리즘을 활용하여 NumPy 배열에서 요소별 작업을 수행할 수 있습니다. 이는 Pandas 시리즈 객체에서 작동하고 추가 오버헤드를 발생시키는 df.apply()와 대조됩니다.
진정한 벡터화: 최적의 성능
정말 효율적인 열 생성 , NumPy 내에서 벡터화된 계산을 적극 권장합니다. numpy.where와 같은 작업과 df["A"] / df["B"]를 사용한 직접적인 요소별 분할은 매우 빠르며 루프와 관련된 오버헤드를 방지합니다.
Numba 최적화
효율성을 더욱 높이기 위해 Python 함수를 최적화된 C 코드로 변환하는 컴파일러인 Numba를 사용하여 루프를 더욱 최적화할 수 있습니다. Numba는 실행 시간을 마이크로초 단위로 줄여 df.apply() 및 np.Vectorize()보다 훨씬 뛰어난 성능을 제공합니다.
결론
np.Vectorize()는 다음을 제공할 수 있습니다. df.apply()에 비해 약간 개선되었지만 NumPy의 벡터화된 계산을 대체하는 것은 아닙니다. 최대 성능을 달성하려면 Pandas DataFrames에서 새 열을 생성하기 위해 NumPy 내에서 Numba 최적화 또는 직접 벡터화 작업을 활용하세요.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3