Bir numpy dizisinin boş olup olmadığını nasıl kontrol edebilirim?


169

Bir numpy dizisinin boş olup olmadığını nasıl kontrol edebilirim?

Aşağıdaki kodu kullandım, ancak dizi sıfır içeriyorsa bu başarısız olur.

if not self.Definition.all():

Çözüm bu mu?

if self.Definition == array( [] ):

6
len(array( [] ))0'dır len(array( [0] ).
Steven Rumbalski

3
sıfır uzunluklu bir dizi, tüm sıfırları içeren bir dizi veya her ikisini de test etmek istiyor musunuz? 'Boş' tanımınız nedir?
John Lyon

12
@StevenRumbalski: Ama len(array([[]])1 de var!
strpeter

len()ilk eksendeki boyutların sayısını verir. Ancak bir dizi ilk eksende sıfırdan farklı bir boyuta sahip olabilir, ancak başka bir eksende sıfır bir boyuta sahipse yine de boş olabilir. sizetüm eksenlerin ürünü olduğu için daha iyidir.
asmeurer

Yanıtlar:


303

Özelliğe her zaman göz atabilirsiniz .size. Bu olan bir tamsayı olarak tanımlanır , ve sıfır (bir 0dizi herhangi bir öğesi olduğunda):

import numpy as np
a = np.array([])

if a.size == 0:
    # Do something when `a` is empty

4
Bu numpy için harika, ancak listeler için unpythonic olarak kabul edilmesi talihsiz bir durum. Listeler için tartışmaya göz atın: stackoverflow.com/questions/53513/… Sayısal diziler ve listeler için aynı modeli kullanmak iyi olurdu.
eric

NumPy kodu genel olarak listelerde düzgün çalışmıyor veya tam tersi. NumPy dizilerine karşı listeler kullanıyorsanız, kodu farklı bir şekilde yazmanız gerekir.
asmeurer

22

http://www.scipy.org/Tentative_NumPy_Tutorial#head-6a1bc005bd80e1b19f812e1e64e0d25d50f99fe2

NumPy'nin ana hedefi homojen çok boyutlu dizidir. Numpy'de boyutlara eksen denir. Eksen sayısı sıralanır. Numpy'nin dizi sınıfına ndarray denir. Diğer ad dizisi tarafından da bilinir. Bir ndarray nesnesinin daha önemli özellikleri şunlardır:

ndarray.ndim
dizinin eksen (boyut) sayısını gösterir. Python dünyasında, boyutların sayısı sıralama olarak adlandırılır.

ndarray
. dizinin boyutlarını şekillendirir . Bu, her boyuttaki dizinin boyutunu gösteren bir tamsayı grubudur. N satırı ve m sütunu olan bir matris için şekil (n, m) olur. Dolayısıyla şekil demetinin uzunluğu ndim sıralaması veya boyut sayısıdır.

ndarray.size
dizinin toplam öğe sayısını belirler. Bu, şekil öğelerinin ürününe eşittir.


10

Yine de bir uyarı. Np.array (None) .size öğesinin 1 döndürdüğünü unutmayın! Bunun nedeni, a.size öğesinin np.prod (a.shape), np.array (None) .shape () değerine eşit olması ve boş bir ürünün 1 olmasıdır.

>>> import numpy as np
>>> np.array(None).size
1
>>> np.array(None).shape
()
>>> np.prod(())
1.0

Bu nedenle, bir numpy dizi öğeleri olup olmadığını test etmek için aşağıdakileri kullanın:

>>> def elements(array):
    ...     return array.ndim and array.size

>>> elements(np.array(None))
0
>>> elements(np.array([]))
0
>>> elements(np.zeros((2,3,4)))
24

8
NoneNesneyi içeren bir dizi boş bir dizi değildir, daha fazla ayrıntı için buradaki yanıtlara bakın
DrBwts

1
Bu yanıtla ilgili olmayan @DrBwts.
vidstige

@DrBwts Dizisi Nonenesneyi içermiyor . Şekline bak.
Navin

Şekle ()sahip diziler, bir öğe (skaler) içeren skaler dizilerdir. Bu örnekte, skaler None( Noneözel bir anlamı yoktur, bu sadece bir nesne dizisidir). Ne yaptığınıza bağlıdır, ancak büyük olasılıkla skaler dizileri boş olarak değerlendirmek istemezsiniz.
asmeurer

-1

Neden bir dizinin olup olmadığını kontrol etmek istiyoruz empty? Diziler listelerde olduğu gibi büyümez veya küçülmez. 'Boş' bir dizi ile başlamak ve onunla birlikte büyümek np.appendsık sık acemi bir hatadır.

Bir listeyi if alist:boole değerine bağlı menteşelerde kullanma :

In [102]: bool([])                                                                       
Out[102]: False
In [103]: bool([1])                                                                      
Out[103]: True

Ama aynı şeyi bir dizi ile yapmaya çalışmak (sürüm 1.18'de):

In [104]: bool(np.array([]))                                                             
/usr/local/bin/ipython3:1: DeprecationWarning: The truth value 
   of an empty array is ambiguous. Returning False, but in 
   future this will result in an error. Use `array.size > 0` to 
   check that an array is not empty.
  #!/usr/bin/python3
Out[104]: False

In [105]: bool(np.array([1]))                                                            
Out[105]: True

ve bool(np.array([1,2])rezil belirsizlik hatasını üretir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.