numpy 배열이 비어 있는지 여부를 어떻게 확인할 수 있습니까?


169

numpy 배열이 비어 있는지 여부를 어떻게 확인할 수 있습니까?

다음 코드를 사용했지만 배열에 0이 있으면 실패합니다.

if not self.Definition.all():

이것이 해결책입니까?

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

6
len(array( [] ))len(array( [0] )
Steven Rumbalski

3
길이가 0 인 배열, 0이 모두 포함 된 배열 또는 둘 다를 테스트 하시겠습니까? 'empty'에 대한 정의는 무엇입니까?
John Lyon

12
@StevenRumbalski : 그러나 len(array([[]])1도!
strpeter

len()첫 번째 축의 치수 수를 제공합니다. 그러나 배열은 첫 번째 축에서 0이 아닌 차원을 가질 수 있지만 다른 축에서 0이있는 경우 여전히 비어 있습니다. size모든 축의 곱이므로 더 좋습니다.
asmeurer

답변:


303

당신은 항상 .size속성을 볼 수 있습니다 . 그것은되는 정수로 정의 하고, 영 (인 0배열에 요소가 존재하지 않는 경우) :

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

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

4
이것은 numpy에는 좋지만 불행히도 목록에 대해 파이썬이 아닌 것으로 간주됩니다. 목록에 대한 토론을 확인하십시오 : stackoverflow.com/questions/53513/… numpy 배열과 목록에 동일한 패턴을 사용하는 것이 좋습니다.
eric

일반적으로 NumPy 코드는 목록에서 제대로 작동하지 않거나 비자로도 작동하지 않습니다. 목록과 NumPy 배열을 사용하는 경우 다른 방식으로 코드를 작성해야합니다.
asmeurer

22

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

NumPy의 주요 대상은 동종 다차원 배열입니다. Numpy 치수에서 축이라고합니다. 축 수는 순위입니다. Numpy의 배열 클래스를 ndarray라고합니다. 별명 배열로도 알려져 있습니다. ndarray 객체의보다 중요한 속성은 다음과 같습니다.

ndarray.ndim
배열의 축 수 (차원)입니다. 파이썬 세계에서는 차원의 수를 순위라고합니다.

배열
의 크기를 ndarray.shape . 각 차원의 배열 크기를 나타내는 정수 튜플입니다. n 개의 행과 m 개의 열이있는 행렬의 경우 모양은 (n, m)입니다. 따라서 모양 튜플의 길이는 ndim의 순위 또는 차원 수입니다.

ndarray.size 배열
의 총 요소 수입니다. 이것은 모양 요소의 곱과 같습니다.


10

그러나 하나의 경고. np.array (None) .size는 1을 반환합니다! a.size np.prod (a.shape)와 같고 np.array (None) .shape는 ()이며 빈 제품은 1이기 때문입니다.

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

따라서 다음을 사용하여 numpy 배열에 요소가 있는지 테스트합니다.

>>> 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
None객체를 포함하는 배열 은 빈 배열이 아닙니다. 자세한 내용은 여기의 답변을 참조하십시오
DrBwts

1
이 답변과 관련이없는 @ DrBwts.
vidstige

@DrBwts 그의 배열은 None객체를 포함하지 않습니다 . 모양을보십시오.
Navin

모양 ()이있는 배열은 스칼라 배열이며 요소 (스칼라)를 포함합니다. 이 예제에서 스칼라는 None( None특별한 의미가 없으며 이것은 단지 객체 배열입니다). 그것은 당신이하고있는 일에 달려 있지만 스칼라 배열은 비어 있지 않은 것으로 간주하려고합니다.
asmeurer

-1

왜 배열이 있는지 확인하고 싶 empty습니까? 배열은 목록과 동일하게 커지거나 줄어들지 않습니다. '빈'배열로 시작 np.append하여 빈번한 초보자 오류가 발생합니다.

if alist:부울 값 에 경첩으로 목록 사용 :

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

그러나 배열로 동일한 작업을 시도하면 버전 1.18이 생성됩니다.

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

그리고 bool(np.array([1,2])악명 높은 모호성 오류가 발생합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.