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.