2016-04-22 24 views
34

Değişken Yok veya numpy.array olup olmadığını kontrol etmek istiyorum. Bunu yapmak için check_a işlevini uyguladım.Değer Değişken olup olmadığını denetlerken Değer Yok veya numpy.array

Ancak, bu kod ValueError'ı yükseltir. Doğru yol nedir? Eğer isinstance kullanmak Ayrıca eğer

# be careful not to check for np.array but for np.ndarray! 
if type(a) is np.ndarray: 
    ... 
else: 
    ... 

, aynı zamanda bunun alt sınıfları için True döndürür:

ValueError        Traceback (most recent call last) 
<ipython-input-41-0201c81c185e> in <module>() 
     6 check_a(a) 
     7 a = np.array([1,2]) 
----> 8 check_a(a) 

<ipython-input-41-0201c81c185e> in check_a(a) 
     1 def check_a(a): 
----> 2  if not a: 
     3   print "please initialize a" 
     4 
     5 a = None 

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 
+1

Bu 'ValueError', en yaygın 'numpy' sorularından biridir. Bu, "bir" değil, bir boole dizisi üretiyor demektir (bu durumda) 2 değerleri. Bu boole dizisi bir 'if' koşulu olarak kullanılamaz! 'Yok'dur' alternatifi bilmek iyidir, ancak bu hatayı da anlamalısınız. – hpaulj

cevap

53

Sadece

if a is None: 
    ... 
else: 
    ... 

!: Yoksa daha açık olmasını istiyorsanız yapmanız türü (eğer istediğinizi buysa):

# be careful not to check for np.array but for np.ndarray! 
if isinstance(a, np.ndarray): 
    ... 
else: 
    ...