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()
えっ。