stMind

You'll never blog alone

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() について

pythonでnumpyを使ったプログラミングをしていてエラーの意味がわからなくて
ハマったのでメモ。

やりたいことは、配列同士の比較して一致してるかどうかを判定すること。

data = [1,2]
data2 = [1,3]

data == data2
=> False

bool(data == data2)
=> False

np_data = np.array([1,2])
np_data2 = np.array([1,3])

np_data == np_data2
=> array([True, False], dtype=bool)

bool(np_data == np_data2)
=> ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

numpyのarrayでは要素同士の比較になるため、boolコンテキストで評価すると
1個より多い真偽値は曖昧となってしまうというエラーだった。
上記の例だと、np_data == np_data2はTrueなのかFalseなのか曖昧ということ。

じゃあ、全部TrueもしくはFalseだったらどうなるか?

np_data3 = np.array([4,5])

np_data == np_data3
=> array([False, False], dtype=bool)

bool(np_data == np_data3)
=> ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

やっぱりエラーとなる。

numpyのararyは要素同士の比較であることに注意しよう!