2012-02-15 7 views
13

나는 예를 들어 두 NumPy와 배열을 가지고 :다른 배열의 값을 사용하여 numpy 배열을 필터링하는 방법은 무엇입니까?

a = [1,2,3,4,5] 

및 필터 배열을, 예를 들면 : 나는에서만 값으로 새로운 NumPy와 배열을 얻을 수있는 방법

f = [False, True, False, False, True] 

len(a) == len(f) 

어디 같은 지수 f이 참입니까? 내 경우에는 : [2, 5]. (다른 값) 허용 솔루션에 따르면

:

>>> a = numpy.array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 
>>> b = numpy.array([True, False, True, False, True, False, True, False, True, False]) 
>>> a[b] 
array([1, 3, 5, 7, 9]) 
+2

b는 배열이 아닌리스트이고 b는 부울 배열이어야합니다. 'b = np.asarray (b, 'bool') 시도해보십시오. –

답변

22

NumPy와는이 af이 문제로 (NumPy와 배열이 아닌 파이썬 목록 있다고 가정 boolean indexing

a[f] 

지원). f = np.array(f)으로 변환 할 수 있습니다. 이미 NumPy와 배열이 필요하지 않은 경우

+0

이것은 작동하지 않습니다. 질문을보십시오. –

+2

'b'가 numpy 배열인지 확인하십시오. 답변에서 업데이트되었습니다. – YXD

+1

나는 해결책에 따라 그것을 바꾸었고 질문에 주석을 달았습니다 ... 이제 작동합니다, 감사합니다! –

3

, 여기에 일반 목록입니다 : 파이썬의 사전 2.7 버전의

import itertools 
print itertools.compress(a, f) 

, 당신은 당신의 자신의 (매뉴얼 참조) 롤해야합니다

def compress(data, selectors): 
    return (d for d, s in itertools.izip(data, selectors) if s) 
관련 문제