2016-09-12 2 views
4

numpy 배열에서 "in"연산을 수행하려면 어떻게해야합니까? (주어진 numpy 배열에 요소가있는 경우 True를 반환)숫자가 많은 배열에 대해 "in"연산자가 사용됩니까?

문자열, 목록 및 사전의 경우 기능을 이해하기 쉽습니다. 여기

내가 마지막 두 개의 축에서 각각의 위치에 a의 모든 요소에 걸쳐 broadcasted 비교를 수행합니다 당신은 equality의 입력 배열을 비교할 수

a 
array([[[2, 3, 0], 
    [1, 0, 1]], 

    [[3, 2, 0], 
    [0, 1, 1]], 

    [[2, 2, 0], 
    [1, 1, 1]], 

    [[1, 3, 0], 
    [2, 0, 1]], 

    [[3, 1, 0], 
    [0, 2, 1]]]) 

b = [[3, 2, 0], 
    [0, 1, 1]] 

b in a 
True 
#Aligned with the expectation 

c = [[300, 200, 0], 
    [0, 100, 100]] 

c in a 
True 
#Not quite what I expected 
+0

하지만, 2D 배열의 행에 적용하려면 몇 가지 트릭이 필요합니다. 관련된 코드를 보려면 코드를보십시오. – hpaulj

답변

4

NumPy와 배열에 그것을 적용 할 때 내가 가진 무엇 두 번째 배열의 해당 위치에있는 요소와 비교합니다.

((a==b).all(axis=(1,2))).any() 

샘플 실행

1) 입력 - 이것은 우리가 마지막 두 개의 축에 걸쳐 ALL 일치를 확인하고 마지막으로, ANY 일치 확인과 같이있는 일치하는 부울 배열 발생합니다 :

In [68]: a 
Out[68]: 
array([[[2, 3, 0], 
     [1, 0, 1]], 

     [[3, 2, 0], 
     [0, 1, 1]], 

     [[2, 2, 0], 
     [1, 1, 1]], 

     [[1, 3, 0], 
     [2, 0, 1]], 

     [[3, 1, 0], 
     [0, 2, 1]]]) 

In [69]: b 
Out[69]: 
array([[3, 2, 0], 
     [0, 1, 1]]) 

2) 방영 elementwise 비교 :

In [70]: a==b 
Out[70]: 
array([[[False, False, True], 
     [False, False, True]], 

     [[ True, True, True], 
     [ True, True, True]], 

     [[False, True, True], 
     [False, True, True]], 

     [[False, False, True], 
     [False, False, True]], 

     [[ True, False, True], 
     [ True, False, True]]], dtype=bool) 
,

3) ALL 마지막 두 축에서 경기를 마지막으로 ANY 경기 :

In [71]: (a==b).all(axis=(1,2)) 
Out[71]: array([False, True, False, False, False], dtype=bool) 

In [72]: ((a==b).all(axis=(1,2))).any() 
Out[72]: True 

ca에 비슷한 단계를 수행 -`np.in1d`가 1 차원 배열에 대한

In [73]: c 
Out[73]: 
array([[300, 200, 0], 
     [ 0, 100, 100]]) 

In [74]: ((a==c).all(axis=(1,2))).any() 
Out[74]: False 
+0

오늘을 저장해 주셔서 감사합니다! numpy 배열에 존재를 확인하기 위해 "in"과 같은 간단한 방법은 없습니까? – akilat90

+0

@ akilat90 나는 두려워하지 않습니다. 아니면 그냥 함수로 포장하고 거기에 가서, 사용자 정의 만든'똑 바른 방법! – Divakar

관련 문제