2013-10-11 2 views
1

길이가 다른 배열을 포함하는 목록이 있고 특정 배열이 목록 안에 있는지 확인하려고합니다. 목록의 길이의 배열을 포함하는 경우 이러한 검사가 더 큰 확인 할 수있는 요소보다,Length-2 배열 목록에 길이가 1 인 배열이 있는지 묻는 경우 ValueError

from numpy import array 
array([0]) in [array([0]), array([1,2])] 
>>> True 

그러나 예를 들어, 내가

array([0]) in [array([1,2])] 
>>> ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

지금, 내 질문은이 오류를 얻을 수의 (a) 누군가가이 사실을 이해하도록 도와 줄 수 있습니까? (b) 대신 어떻게 요소 점검을해야합니까?

답변

1

당신이 당신의 요소를 교체하면 목록이 대상 배열 포함 된 경우에도, 당신이 오류가 발생합니다 : 첫 번째 요소는 평등을 통과하기 때문에 array([0]) in [array([0]), array([1,2])]의 원래의 예에서

>>> array([0]) in [array([1,2]), array([0])] 
Traceback (most recent call last): 
    File "<input>", line 1, in <module> 
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any 
() or a.all() 

을, 두 번째 요소는 테스트되지 않습니다 테스트.

는 먼저 올바른 형태의 요소를 제한함으로써이 문제를 얻을 수

: 당신은 당신의 설정과 조금 더 많은 데이터의 예를 설명 할 수있는 경우, 일반적으로보다 빠르고 그러나

>>> arrs = [array([0]), array([1,2])] 
>>> array([0]) in [a for a in arrs if a.shape == (1,)] 
True 
>>> arrs = [array([1,2]), array([0])] 
>>> array([0]) in [a for a in arrs if a.shape == (1,)] 
True 
>>> 

있다 NumPy 우리가 당신을 보여줄 수있는 방법. NumPy 배열 목록이있는 이유는 무엇입니까?

+0

이유는,이 목록은 여러 가지 길이의 배열이 제거되고 동적으로 추가되는 중요한 알고리즘을 거치기 때문입니다. 요소의 길이가 다르며 그 수는 다양하므로 목록을 외부 구조로 사용하는 것이 가장 좋습니다. 내 오해가 사실은, 길이가 다른 배열에 대해'a == b'가'거짓 '이라고 기대하지만, 오류가 있다고 생각합니다. – flonk

관련 문제