ホームページ >バックエンド開発 >Python チュートリアル >NumPy 配列上に関数をマッピングする最も効率的な方法は何ですか?

NumPy 配列上に関数をマッピングする最も効率的な方法は何ですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-13 17:03:09666ブラウズ

What's the Most Efficient Way to Map Functions Over NumPy Arrays?

NumPy での効率的な配列マッピングの探索

この説明では、NumPy 配列上で関数をマッピングするための最も効率的な方法について詳しく説明します。一般的なアプローチの 1 つは、リスト内包表記を利用してから NumPy 配列に変換し直すことです:

import numpy as np 

x = np.array([1, 2, 3, 4, 5])
squarer = lambda t: t ** 2
squares = np.array([squarer(xi) for xi in x])

ただし、このアプローチでは、中間の Python リストの作成と変換が原因で非効率になる可能性があります。パフォーマンスが向上する可能性のある代替方法を検討してみましょう。

ネイティブ NumPy 関数の活用

ターゲット関数がすでに NumPy に実装されている場合は、次のようにそれを直接利用するのが最適です。

x ** 2

このアプローチは、固有の機能により、他の方法よりも大幅に高速です。 NumPy のネイティブ関数の最適化。

関数のベクトル化

目的の関数が NumPy にネイティブではない場合、ベクトル化は関数要素の適用を可能にする強力な手法です。配列に対して賢明です。これは、以下を使用して実現できます。

vf = np.vectorize(f)
vf(x)

このアプローチは、ベクトル化された操作の効率的な実装を提供します。

fromiter() の使用

fromiter()関数を使用して、指定された関数と配列に基づいて要素を生成するイテレータを作成できます。値:

np.fromiter((f(xi) for xi in x), x.dtype)

このアプローチは、反復子からカスタム配列要素を生成する場合に特に適しています。

パフォーマンスの比較

実証テストにより、顕著なパフォーマンスが明らかになりましたさまざまなマッピング方法の違い。関数が NumPy でベクトル化されている場合、その関数を直接使用することは速度の点で比類のないものになります。カスタム関数の場合、ベクトル化または fromiter() は、リスト内包ベースのメソッドよりも大きな利点を提供することがよくあります。

結論

NumPy 配列上で関数をマッピングするための最も効率的なアプローチ特定の関数とデータの特性によって異なります。可能であれば、ネイティブの NumPy 関数を活用することを強くお勧めします。ベクトル化と fromiter() は、カスタム関数の効率的な代替手段を提供します。特定のシナリオに最適な方法を決定するには、パフォーマンス テストが不可欠です。

以上がNumPy 配列上に関数をマッピングする最も効率的な方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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