2013-09-30 5 views
2

두 개의 numpy 배열이 2D 좌표를 나타냅니다. 내가 효율적으로 ba에서 요소를 제거 할 것인지numpy 배열의 요소를 값으로 삭제합니다.

a = np.array([[1, 1], [2, 1], [3, 1], [3, 2], [3, 3], [5, 5]]) 
b = np.array([[1, 1], [5, 5], [3, 2]]) 

: 각 행은 (x, y) 쌍을 나타냅니다. 결과는 다음과 같습니다.

array([[2, 1], [3, 1], [3, 3]]) 

나는 루핑과 비교를 통해이를 수행 할 수 있었으면 좋겠다.

+0

이것은 중복, 나는 사과, 나는 검색을했지만 찾을 수 없습니다 대답. – enedene

+5

@enedene 질문을 복제본으로 표시하는 것은 고발이나 징계가 아니라, 이미 답변이있는 곳을 가리키는 포인터입니다. 당신은 질문을 더 명확하게 해주었습니다. 그러나 그 대답은 이미 거기에 있습니다. – askewchan

답변

0

파이썬 sets은 차이점을 제공합니다. 그것은, 그러나, 순서 유지하지 않습니다

np.array(list(set(tuple(x) for x in a.tolist()).difference(set(tuple(x) for x in b.tolist())))) 

또는 outer equalssumanyall

A = np.all((a[None,:,:]==b[:,None,:]),axis=-1) 
A = np.any(A,axis=0) 
a[~A,:] 

을 만들거나 a을하고 b 복잡한 방송 사용, 부울 색인을 사용하려면 :

ac = np.dot(a,[1,1j]) 
bc = np.dot(b,[1,1j]) 
A = np.any(ac==bc[:,None],axis=0) 
a[~A,:] 

또는 setxor1d

xx = np.setxor1d(ac,bc) 
# array([ 2.+1.j, 3.+1.j, 3.+3.j]) 
np.array([xx.real,xx.imag],dtype=int).T 

=================

In [222]: ac = np.dot(a,[1,1j]) 
    ...: bc = np.dot(b,[1,1j]) 
In [223]: ac 
Out[223]: array([ 1.+1.j, 2.+1.j, 3.+1.j, 3.+2.j, 3.+3.j, 5.+5.j]) 
In [225]: bc 
Out[225]: array([ 1.+1.j, 5.+5.j, 3.+2.j]) 
In [226]: ac == bc[:,None] 
Out[226]: 
array([[ True, False, False, False, False, False], 
     [False, False, False, False, False, True], 
     [False, False, False, True, False, False]], dtype=bool) 
+0

나는 a와 b를 만드는 것이 어떻게 해결되는지 알고 싶어합니다. 나는 그것이 효과가있는 것을 본다. 그러나 이유를 아는 것은 멋질 것이다. – rmooney

+1

복잡하게 만드는 것은 각 쌍을 하나의 복소수로 결합합니다. 그리고 복소수에 대한 평등이 정의되었습니다. 이것은 문제의 차원을 줄이는 또 다른 방법 일뿐입니다. – hpaulj

관련 문제