변수가 None 또는 numpy.array인지 확인하고 싶습니다. check_a
이 작업을 수행 하는 기능을 구현 했습니다.
def check_a(a):
if not a:
print "please initialize a"
a = None
check_a(a)
a = np.array([1,2])
check_a(a)
그러나이 코드는 ValueError를 발생시킵니다. 직접적인 방법은 무엇입니까?
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()
답변
사용 not a
여부를 테스트하는 a
것은 None
다른 가능한 값이 있다고 가정 a
의 진리 값이 True
. 그러나 대부분의 NumPy 배열에는 진리 값 not
이 전혀 없으며 적용 할 수 없습니다.
객체가인지 여부를 테스트 None
하려면 가장 일반적이고 신뢰할 수있는 방법은 말 그대로에 대한 is
검사를 사용하는 것입니다 None
.
if a is None:
...
else:
...
이것은 진리 값을 가진 객체에 의존하지 않으므로 NumPy 배열과 함께 작동합니다.
테스트가되어야합니다 있습니다 is
, 없습니다 ==
. is
객체 신원 테스트입니다. ==
인수가 말하는대로이고 NumPy 배열은 브로드 캐스트 된 요소 별 동등성 비교로 부울 배열을 생성합니다.
>>> 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()
다른 한편으로 객체가 NumPy 배열인지 테스트하려면 해당 유형을 테스트 할 수 있습니다.
# Careful - the type is np.ndarray, not np.array. np.array is a factory function.
if type(a) is np.ndarray:
...
else:
...
를 사용할 수도 있습니다 isinstance
. 이는 True
해당 유형의 하위 클래스에 대해서도 반환 됩니다 (원하는 경우). 얼마나 끔찍하고 호환되지 np.matrix
않는지 고려할 때 실제로 이것을 원하지 않을 수도 있습니다.
# Again, ndarray, not array, because array is a factory function.
if isinstance(a, np.ndarray):
...
else:
...
답변
매우 유사한 작업을 시도하는 경우 : a is not None
, 동일한 문제가 발생합니다. 즉, Numpy는 a.any
또는a.all
.
해결 방법은 다음과 같습니다.
if not (a is None):
pass
너무 예쁘지는 않지만 작업을 수행합니다.
답변
물체의 모양이 있는지 확인할 수 있습니다.
def check_array(x):
try:
x.shape
return True
except:
return False