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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-26 09:55:10539ブラウズ

What are the most efficient ways to map functions to NumPy arrays?

関数を NumPy 配列にマッピングする

概要

NumPy 配列に関数をマッピングするには、各要素に関数を適用する必要があります。配列内で結果を含む新しい配列を取得します。質問で説明されているリストの内包表記と NumPy 配列への変換を使用する方法は簡単ですが、最も効率的なアプローチではない可能性があります。この記事では、NumPy 配列に関数を効率的にマッピングするためのさまざまな方法について説明します。

ネイティブ NumPy 関数

適用したい関数が既にベクトル化された NumPy 関数 (平方根や対数など) である場合は、次を使用します。 NumPy のネイティブ関数を直接使用するのが最も速いオプションです。

import numpy as np

x = np.array([1, 2, 3, 4, 5])
squares = np.square(x)  # Fast and straightforward

配列の理解Map

NumPy でベクトル化されていないカスタム関数の場合、通常、配列内包表記を使用する方が従来のループを使用するより効率的です。

import numpy as np

def my_function(x):
    # Define your custom function

x = np.array([1, 2, 3, 4, 5])
squares = np.array([my_function(xi) for xi in x])  # Reasonably efficient

map 関数も使用できますが、配列よりもわずかに効率が劣ります内包表記:

import numpy as np

def my_function(x):
    # Define your custom function

x = np.array([1, 2, 3, 4, 5])
squares = np.array(list(map(my_function, x)))  # Slightly less efficient

np.fromiter

np.fromiter 関数は、関数をマッピングするための別のオプションであり、特に関数がイテレータを生成する場合に役立ちます。ただし、配列の内包よりも効率は若干劣ります。

import numpy as np

def my_function(x):
    # Define your custom function
    return iter([my_function(xi) for xi in x])  # Yields values as an iterator

x = np.array([1, 2, 3, 4, 5])
squares = np.fromiter(my_function(x), x.dtype)  # Less efficient, but works with iterators

ベクトル化

場合によっては、NumPy のベクトル化フレームワークを使用してカスタム関数をベクトル化することができます。このアプローチには、要素ごとに配列に適用できる新しい関数の作成が含まれます。

import numpy as np

def my_function(x):
    # Define your custom function

x = np.array([1, 2, 3, 4, 5])
my_vectorized_function = np.vectorize(my_function)
squares = my_vectorized_function(x)  # Most efficient, but may not always be possible

パフォーマンスに関する考慮事項

メソッドの選択は、配列のサイズなどの要因によって異なります。関数の複雑さ、および NumPy が関数のベクトル化バージョンを提供するかどうか。小さな配列と単純な関数の場合は、配列の内包またはマップで十分な場合があります。より大きな配列またはより複雑な関数の場合は、効率を最適化するためにネイティブの NumPy 関数またはベクトル化を使用することをお勧めします。

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

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