Pythonの科学計算モジュールであるnumpyには、関数をベクトル化するための便利な関数vectorize
があります。この関数は、引数に値をとるPythonの関数にリストを突っ込むことができるように変換します。入力のarrayの各値を引数として計算し、返り値はベクトル化されます。
例えば、次のようなif-else文を含む関数があるとします。
def vector_function(x, y):
if y >= x:
return x * y
else:
return x / y
この関数をベクトル化するには、np.vectorize
を使用します。
vfunc = np.vectorize(vector_function)
これにより、vfunc
はベクトル化された関数となり、配列の各要素に対して関数を適用することができます。
しかし、もし関数内でif文を使用している場合、そのままでは配列に対して関数を適用することができません。その場合、np.where
を使用して条件分岐を行うことが一般的です。
def f(x, y):
x = np.array(x)
y = np.array(y)
return np.where(y == 0, 0, x/y)
この関数f
は、y
が0の場合は0を、それ以外の場合はx/y
を返します。この関数は、x
またはy
がスカラーで、もう一方がnumpy配列である場合、または両方がブロードキャスト可能な配列である場合に動作します。
以上がPythonでif-else文をベクトル化する基本的な方法です。これにより、大量のデータに対して効率的に条件分岐を行うことができます。