ホームページ  >  記事  >  バックエンド開発  >  Pandas apply と NumPy Vectorize: 新しい列の作成はどちらが速いですか?

Pandas apply と NumPy Vectorize: 新しい列の作成はどちらが速いですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-27 08:28:31451ブラウズ

  Pandas Apply vs. NumPy Vectorize: Which is Faster for Creating New Columns?

列作成における Pandas apply と NumPy Vectorize のパフォーマンス

概要

while Pandas df.apply() はデータフレームを操作するための多用途関数ですが、特に大規模なデータセットの場合、そのパフォーマンスが懸念される可能性があります。 NumPy の np.vectorize() は、既存の列の関数として新しい列を作成するための潜在的な代替手段を提供します。この記事では、2 つのメソッド間の速度の違いを調査し、一般に np.vectorize() の方が速い理由を説明します。

パフォーマンスの比較

広範なベンチマークにより、np.vectorize() が明らかになりました。 ) 一貫して df.apply() を大幅に上回りました。たとえば、100 万行のデータセットでは、2016 MacBook Pro では np.vectorize() が 25 倍高速になりました。この差異は、データセットのサイズが大きくなるにつれてさらに顕著になります。

基礎となるメカニズム

df.apply() は、一連の Python レベルのループを通じて動作します。これにより、重要な問題が発生します。オーバーヘッド。各反復には、新しい Pandas Series オブジェクトの作成、関数の呼び出し、結果の新しい列への追加が含まれます。対照的に、np.vectorize() は NumPy のブロードキャスト ルールを利用して配列上の関数を評価します。このアプローチは、Python ループのオーバーヘッドをバイパスし、最適化された C コードを活用し、実行を大幅に高速化します。

真のベクトル化

真のベクトル化計算の場合、 df.apply も必要ありません。 () または np.vectorize() が最適です。代わりに、ネイティブの NumPy 操作は優れたパフォーマンスを提供します。たとえば、ベクトル化された Division() は、df.apply() や np.vectorize() よりも劇的なパフォーマンスの利点を示します。さらに効率が向上するため、Numba の @njit デコレータを使用して、divide() 関数を効率的な C レベルのコードにコンパイルできます。このアプローチにより、実行時間がさらに短縮され、秒単位ではなくマイクロ秒単位で結果が得られます。

結論

df.apply() はデータフレームに関数を適用するための便利なインターフェイスを提供しますが、データセットが大規模になると、パフォーマンスの限界が明らかになります。パフォーマンスが重要なアプリケーションの場合、NumPy の np.vectorize() と、JIT コンパイルされた Numba の対応物は、新しい列の作成に優れた速度を提供します。また、ネイティブの NumPy 関数を使用した真のベクトル化操作が、大規模なデータ操作にとって最も効率的なオプションであることも注目に値します。

以上がPandas apply と NumPy Vectorize: 新しい列の作成はどちらが速いですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。