2017-12-24 10 views
1

NumPy 배열이 있습니다. 나는 중복 요소들로만 구성되는 새로운 것을 생성하고 싶습니다. 예를 들어, 배열하기 전에중복 된 요소 만 보관하려면 배열을 필터링하는 방법?

[[ 3. 0. 1. 0. 12. 1.] 
[ 14. 0. 2. 2. 0. 3.] 
[ 3. 0. 1. 2. 0. 3.] 
[ 12. 0. 14. 0. 12. 1.] 
[ 14. 0. 2. 12. 0. 14.] 
[ 15. 4. 13. 13. 14. 15.] 
[ 14. 2. 15. 13. 14. 15.]] 

처럼 보일 수 있으며, 수술 후 나는 그것이 지금

[[ 1. 0. ] 
[ 0. 2. ] 
[ 3. 0. ] 
[ 12. 0. ] 
[ 14. 0. ] 
[ 15. 13. ] 
[ 14. 15. ]] 

처럼보고 싶어, 나는 누군가 어쩌면에 대한 루프를 사용하여 할 것이나, 당신은 더 부드럽고 빠른 길을 알고 있습니다.

+0

잘하면, for 루프가 필요한 솔루션을 원하지 않습니까? – IMCoins

+0

그냥 분명하기 때문에, 그것은 2 차원 어레이이기 때문에 행별로 필터링을하고 있으며, 한 번 이상 올바른 것으로 보이는 것과 같이 고유하지 않은 요소 만 필터링하려고합니다. – camdixon

+2

그는 각 목록의 중복 된 번호를 한 번 유지하려고합니다. – IMCoins

답변

1

복제본의 길이가 줄마다 바뀔 수 있기 때문에 단일 numpy 단계로 수행 할 수 없습니다.

나는 당신에게 다음 작업을 제안합니다. 그런 다음

def dups(a): 
    uniques, counts = np.unique(a, return_counts=True) 
    return uniques[np.where(counts > 1)] 

배열의 각 행에 적용 :

중복을 찾을 수있는 기능을 정의하는 모든 행이 중복 같은 번호를 가지고있는 경우에

ans = [dups(row) for row in arr] 

, 당신은 귀하의 예 : c

ans = np.stack(ans) 

: ans 밖으로 NumPy와 배열을 만들 수 있습니다 ase, 인쇄합니다 :

[[ 0. 1.] 
[ 0. 2.] 
[ 0. 3.] 
[ 0. 12.] 
[ 0. 14.] 
[ 13. 15.] 
[ 14. 15.]] 
+0

네, 고맙습니다. – TomK