Olup not a
olmadığını test etmek a
için kullanmak None
, diğer olası değerlerinin a
doğruluk değerine sahip olduğunu varsayar True
. Bununla birlikte, çoğu NumPy dizisinin bir doğruluk değeri yoktur ve not
bunlara uygulanamaz.
Bir nesnenin olup olmadığını test etmek istiyorsanız None
, en genel ve güvenilir yol, kelimenin tam anlamıyla aşağıdakilere is
karşı bir kontrol kullanmaktır None
:
if a is None:
...
else:
...
Bu, doğruluk değerine sahip nesnelere bağlı değildir, bu nedenle NumPy dizileriyle çalışır.
Testin olması gerektiğini unutmayın is
, değil ==
.is
bir nesne kimlik testidir. ==
argümanlar ne derse desin ve NumPy dizileri bunun bir boole dizisi üreten bir yayınlanmış elementsel eşitlik karşılaştırması olduğunu söylüyor:
>>> a = numpy.arange(5)
>>> a == None
array([False, False, False, False, False])
>>> if a == None:
... pass
...
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()
Diğer taraftan, bir nesnenin NumPy dizisi olup olmadığını test etmek istiyorsanız, türünü test edebilirsiniz:
# Careful - the type is np.ndarray, not np.array. np.array is a factory function.
if type(a) is np.ndarray:
...
else:
...
Ayrıca , bu türdeki alt sınıflar için isinstance
de dönecek True
olan (eğer istediğiniz buysa) kullanabilirsiniz. Ne kadar korkunç ve uyumsuz np.matrix
olduğunu düşünürsek , aslında bunu istemeyebilirsiniz:
# Again, ndarray, not array, because array is a factory function.
if isinstance(a, np.ndarray):
...
else:
...
ValueError
en yaygınnumpy
sorulardan biridir. Bunot a
, (bu durumda) 2 değerli bir boole dizisi oluşturduğu anlamına gelir . Bu boole dizisi birif
koşul olarak kullanılamaz !is None
Alternatif bilmek iyidir, ama aynı zamanda bu hatayı anlamalıdır.