3
는 :NumPy, 개체 배열에 대한 동등 검사가 작동하지 않는 이유는 무엇입니까? 객체의 다음과 같은 배열로
a = np.array([[1], [1, 2], [1, 2, 3], [1], [1]], dtype=object)
b = np.array([(1,), (1, 2), (1, 2, 3), (1,), (1,)], dtype=object)
다음 평등 검사가 작동하지 않습니다 :
a==[1]
#array([False, False, False, False, False], dtype=bool)
b==(1,)
#array([False, False, False, False, False], dtype=bool)
내가 대신 문자열을 사용하는 경우 :
c = np.array(['[1]', '[1, 2]', '[1, 2, 3]', '[1]', '[1]'])
동등 검사가 작동합니다
를c == '[1]'
#array([ True, False, False, True, True], dtype=bool)
배열 검사가 왜 그렇게 행동합니까?
[i==[1] for i in a]
#[True, False, False, True, True]
[i==(1,) for i in b]
#[True, False, False, True, True]
감사합니다 : 우리가 A 또는 B를 반복하고 또한 예상 된 결과를 제공 검사를 수행하는 경우
!
감사합니다. ' '[1] 요소와 비교하여 방송 규칙을 피하는 방법을 알고 계십니까? –
아니요. 나의 조언은 배열 (또는 배열)을 배열 요소로 사용하는 것을 피하는 것이다. 일종의 명확히 목록이 아닌 객체로 래핑을 시도하거나 [마스크 배열] (http://docs.scipy.org/doc/numpy/reference/maskedarray.generic.html)이 귀하의 유스 케이스. – user2357112
빈 모양 -'()'배열을 만든 다음'[1]'목록으로 채울 수 있습니다. 'c = np.empty ([], dtype = object); c [()] = [1]'. 따라서 목록을 자체 배열로 해석하려는 자동 시도를 피할 수 있습니다. 'a'와'c'를 비교하면 결과가 나옵니다. –