効率的な Numpy 配列マッピング戦略
Numpy 配列上で関数をマッピングする場合、パフォーマンス効率が非常に重要です。 「マッピング操作の最も効率的なアプローチは何ですか?」
非効率なアプローチ: Python リストの理解
質問で提供されている例ではリストが使用されています理解:
squares = np.array([squarer(xi) for xi in x])
このアプローチは機能しますが、次のような本質的な非効率性があります。 Python リストから Numpy 配列への中間変換。
最適化された戦略
さまざまな方法をテストすると、最適なソリューションが現れます:
1.組み込みの Numpy 関数を使用する:
マッピングしている関数がすでに Numpy でベクトル化されている場合 (例: x^2)、それを直接使用すると優れたパフォーマンスが得られます:
squares = x ** 2
2. numpy.vectorize によるベクトル化:
カスタム関数の場合、numpy.vectorize によるベクトル化により速度が大幅に向上します:
f = lambda x: x ** 2 vf = np.vectorize(f) squares = vf(x)
3. numpy.fromiter:
このアプローチは、関数から反復子を作成し、numpy.fromiter を使用して Numpy 配列を効率的に構築します:
squares = np.fromiter((squarer(xi) for xi in x), x.dtype)
4。 numpy.array(list(map(...)):
もう 1 つの最適化された代替案は、map を使用してそれを Numpy 配列に変換することです:
squares = np.array(list(map(squarer, x)))
ベンチマークを実施perfplot を使用すると、これらの最適化されたメソッドが元のリスト理解アプローチよりも大幅に優れていることがわかります。
以上がNumPy 配列上に関数をマッピングする最も効率的な方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。