ホームページ >バックエンド開発 >Python チュートリアル >NumPy 配列に関数を効率的に適用するにはどうすればよいですか?

NumPy 配列に関数を効率的に適用するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-18 04:42:16932ブラウズ

How Can I Efficiently Apply Functions to NumPy Arrays?

Numpy 配列の関数のベクトル化

Numpy 配列上に関数を効率的にマップするには、ベクトル化の機能を利用できます。配列に対して要素ごとに操作を実行します。これは、リスト内包表記などのループベースのアプローチを使用するよりもはるかに高速です。

NumPy ネイティブ関数

マップする関数がすでに NumPy 関数としてベクトル化されている場合は、要素を二乗するための np.square() など、それを使用することを強くお勧めします。他の方法よりも大幅に高速になります。

NumPy の Vectorize によるベクトル化

NumPy は、関数をベクトル化するための Vectorize 関数を提供します。関数をラップして、配列に対する要素ごとの操作を有効にします:

import numpy as np

def f(x):
    return x ** 2

vf = np.vectorize(f)
x = np.array([1, 2, 3, 4, 5])
squares = vf(x)

もう 1 つの方法は、関数ラッパーを初期化せずにベクトル化を使用することです:

squares = np.vectorize(f)(x)

その他のベクトル化メソッド

その他のベクトル化方法include:

  • np.fromiter(): ジェネレーターを反復処理し、配列を構築します。
  • np.array(list(map(f, x))): マップを使用します各要素に関数を適用して配列に変換する関数。

パフォーマンス考慮事項

これらのメソッドはすべて関数をベクトル化できますが、パフォーマンスは異なる場合があります。ベンチマークでは、NumPy のネイティブ関数が利用可能な場合は、それを使用するのが最も速いことが示されています。他のケースでは、vectorize と fromiter は通常、np.array(list(map(f, x))) よりもパフォーマンスが優れています。

以上がNumPy 配列に関数を効率的に適用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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