numpyのの '真の' 'true' にPythonのと同じ 'TRUE' ではありませんし、そのためのis
が失敗した:
>>> import numpy as np
>>> a = np.array([True, True, False])
>>> a[:]
array([ True, True, False], dtype=bool)
>>> a[0]
True
>>> a[0]==True
True
>>> a[0] is True
False
>>> type(a[0])
<type 'numpy.bool_'>
>>> type(True)
<type 'bool'>
また、具体的には、PEP 8はDONT使用 'は' かは '==' と言いますブール値:
Don't compare boolean values to True or False using ==:
Yes: if greeting:
No: if greeting == True:
Worse: if greeting is True:
空numpyのアレイはちょうど空のPythonリストまたは空の辞書として試験falseyを行い行います
>>> [bool(x) for x in [[],{},np.array([])]]
[False, False, False]
Pythonの、単一falsey要素のnumpyの配列とは異なり
は、テストfalsey行います
>>> [bool(x) for x in [[False],[0],{0:False},np.array([False]), np.array([0])]]
[True, True, True, False, False]
をしかし、あなたは複数の要素でnumpyの配列とそのロジックを使用することはできません:「だから、
>>> bool(np.array([0,0]))
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()
>>> np.where(np.array([0,0]))
(array([], dtype=int64),)
>>> np.where(np.array([0,1]))
(array([1]),)
または使用any
:numpyのとPEP 8の精神は」唯一の各要素のtruthinessをテストするために、おそらくです
>>> np.array([0,0]).any()
False
>>> np.array([0,1]).any()
True
そして、これはあなたが期待するものではないことに注意してください:
>>> bool(np.where(np.array([0,0])))
True
np.where
が空のタプルを返しているので。
このPEP8 E712はどこにありますか? – mgilson
これは 'pep8'ツールによる特定の診断出力です:https://github.com/jcrocholl/pep8/blob/master/pep8.py#L900。この場合、 'a is True 'は配列に関係する意味がないため、間違っていることに注意してください。 – nneonneo
@mgilsonまた、Pythonの 'linter'を検索することもできます。ほとんどの/いくつかのIDEにはコードをpep8でチェックするためのプラグインがあります。 – Framester