2013-07-17 2 views
4
import numpy as np 

a = np.eye(2) 
b = np.array([1,1],[0,1]) 

my_list = [a, b] 

a in my_list 반환 true하지만 b in my_list 반환 "에 ValueError가 포함되어 있는지 여부를 찾기 :. 두 개 이상의 요소를 배열 모호의 진리 값을 a.any() 또는 a.all를 (사용) ". 배열을 문자열이나 목록으로 먼저 변환하여이 문제를 해결할 수 있지만 더 좋게 (Pythonic) 더 좋은 방법이 있습니까?목록은 특정 NumPy와 배열을

>>> a == b 
array([[ True, False], 
     [ True, True]], dtype=bool) 

당신은 순수한 부울 값으로 배열을 비교하는 .array_equal()를 사용

답변

3

문제는 NumPy와의 == 운영자가 배열을 반환한다는 것입니다.

>>> any(np.array_equal(a, x) for x in my_list) 
True 
>>> any(np.array_equal(b, x) for x in my_list) 
True 
>>> any(np.array_equal(np.array([a, a]), x) for x in my_list) 
False 
>>> any(np.array_equal(np.array([[0,0],[0,0]]), x) for x in my_list) 
False 
+0

단락으로 인해 첫 번째 값 (위에서 'a in my_list'와 같이)을 검사하면 그 이유는 무엇입니까? 배열의 모든 요소가 첫 번째 검사에서 참이면 나머지를 확인하지 않습니다 목록의? –

+0

@ChrisMidgley : 네, 단락 중입니다 ('any()'함수도 단락 중입니다, btw). 또한 모든 요소가 True이면 부울 값이 True임을 명확히 알 수 있습니다. 그러나 True와 False가 혼합 된 경우 NumPy는 암시 적 변환을 결정할 수 없으므로 오류가 발생합니다. – kennytm

-1

자세한 정보.

my_list = [b,a] 

으로 my_list를 구성하면 ... 재미있는 문제입니다.

+0

이유에 대해 알고 싶으면,/google PyObject_RichCompareBool의 문서를 확인하십시오. – seberg

관련 문제