1. ホーム
  2. python

[解決済み] ゼロ除算で0を返すには

2022-06-03 21:35:59

質問

Pythonで要素単位の除算をしようとしていますが、ゼロが発生した場合、商がゼロになるようにする必要があります。

例えば

array1 = np.array([0, 1, 2])
array2 = np.array([0, 1, 1])

array1 / array2 # should be np.array([0, 1, 2])

しかし、本当にnumpyの最適化を利用するには、エラーを無視するのではなく、ゼロによる除算のエラーの際に0を返すdivide関数が必要です。

私が何かを見逃していない限り、これは numpy.seterr() はエラー時に値を返すことができないようです。誰か、私自身のゼロ除算エラー処理を設定しながら、numpyを最大限に活用する方法について他の提案がありますか?

どのように解決するのですか?

numpy v1.7+では、"where"オプションを利用することで ufuncs . あなたは1行で物事を行うことができ、errstateコンテキストマネージャを処理する必要はありません。

>>> a = np.array([-1, 0, 1, 2, 3], dtype=float)
>>> b = np.array([ 0, 0, 0, 2, 2], dtype=float)

# If you don't pass `out` the indices where (b == 0) will be uninitialized!
>>> c = np.divide(a, b, out=np.zeros_like(a), where=b!=0)
>>> print(c)
[ 0.   0.   0.   1.   1.5]

この場合、bが0にならない「場所」ならどこでも除算を行います。 bがゼロに等しい場合、'out'引数で最初に与えたどのような値からも変更されないままです。