Numpyのndarrayは空でなくても偽になる

Pythonのリストの場合、ifの条件式に入れてboolに変換された場合は日本語で言うと「空かどうか」になる。

>>> if []: print "not empty"

>>> if [0]: print "not empty"
not empty

>>> print bool([]), bool([0])
False True

でもNumpyのndarrayはそうではない。

>>> print bool(array([])), bool(array([0]))
False False

これは、ndarrayは「1要素で中身が0の時にはゼロである」と設計されているせい。

>>> array([0]).__nonzero__()
False

Pythonのリストの挙動とは整合しないけど、まあゼロベクトルがゼロと判定されるのはアリかなぁ、などと思ったが…

>>> array([0, 0, 0]).__nonzero__()
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

えっ。