2016-09-08 4 views
1

次のコードの出力はNOTHINGです。作業方法 "np.array([False]):

if np.array([False]): 
    print("hello") 

私はそれを検索しようとしましたが、どのように動作するのかわかりません。 Pythonがifをオーバーロードできますか?

以下は、純粋な配列の場合です。

if [False]: 
    print("hello") 

出力は、あなたがnp.arrayをコーディングする方法を教えてでしょうhello

のですか? [Flase] 1つの項目(すなわち、非空)とのリストがあるので

+1

を使用する必要があります/datamodel.html#object.__bool__)をPython 3に、['__nonzero__'](https://docs.python.org/2/reference/datamodel.html#object.__nonzero__)をPython 2に追加しました。 –

+0

ありがとう!!あなたは私に理解させる答えをします。 – redstone

+0

なぜあなたはこれを試していますか? if式でnumpy配列を使うと、人々が期待するようにほとんど動作しません。 – hpaulj

答えて

1

if [False]:は常にTrueとなりますので、ifブロックが入力されますと、あなたのprintコールの出力が表示されます。

np.array([False])

は、この場合にはFalseに評価numpy.ndarrayを返し、そうifブロックが入力されることはありません、あなたは何も出力されません。

2

それは

>>> bool([False]) ### the returned boolean value is based on the length of the list. 
True 
2

一つのこと... Falseを返すので、それが任意の項目を持っている場合は、リストがtrueを返す。ここ0False

>>> bool(np.array([])) 
False 
>>> bool(np.array([0])) 
False 
>>> bool(np.array([False])) 
False 

のために行う([])np.arrayようです私は気づいたif np.array([False])またはbool(np.array([False])は、配列内の唯一の項目のboolを返します。 ifまたはboolを実行している場合、numpy配列に複数の項目があるはずがありません。

つ以上の要素がある場合は、[はい、あなたはhttps://docs.python.org/3.1/reference([ `__bool__`]を使用して、それをオーバーライドすることができa.any()またはa.all()

>>> if np.array([False, False]): 
... print 's' 
... 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 
>>> bool(np.array([False, False])) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 
>>> 
>>> 
>>> bool(np.array([False, 232])) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 
>>> 
>>> 
>>> bool(np.array([False, 232]).any()) 
True 
>>>