Pandas Apply와 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의 벡터화된 계산을 대체할 수는 없습니다. 최대 성능을 달성하려면 Numba 최적화 또는 NumPy 내에서 직접 벡터화 작업을 활용하여 Pandas DataFrames에서 새 열을 생성하세요.
위 내용은 Pandas 열 생성 시 np.Vectorize()가 df.apply()보다 빠른 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!