2010-11-21 5 views
0

나는 numpy 2D 배열을 가지고 있으며 coloumn c (r, c-1 행) (행 r, coloumn c)가 특정 값 (int n)과 동일한 값을 반환하도록합니다.배열에서 특정 값을 포함하는 행을 추출하는 방법은 무엇입니까? (numpy, scipy)

내가 거기에 그들 중 4000이며,이 2 차원 배열이 전 저점을보고있다 (20)의 하나에 불과하기 때문에,

for r in len(rows): 
    if array[r, c-1] == 1: 
    store array[r,c] 

같은 것을 쓰는 행을 반복하고 싶지 않아요.

"필터"를 찾았지만 사용 방법을 모릅니다 (문서 없음).

그런 검색 기능을 제공합니까?

답변

3

귀하의 질문을 올바르게 이해했기를 바랍니다. 의 당신이 배열 a

a = array(range(7)*3).reshape(7, 3) 
print a 
array([[0, 1, 2], 
     [3, 4, 5], 
     [6, 0, 1], 
     [2, 3, 4], 
     [5, 6, 0], 
     [1, 2, 3], 
     [4, 5, 6]]) 

있다고 가정 해 봅시다 당신은 첫 번째 항목이 2 모든 라인을 추출 할. 이것은 다음과 같이 수행 할 수 있습니다

print a[a[:,0] == 2] 
array([[2, 3, 4]]) 

a[:,0]는 일치하는 항목을 표시하는 부울 배열을 반환 == 2 배열의 첫 번째 열이고, 우리는 각각의 행을 추출 advanced indexing를 사용합니다.

물론 NumPy는 모든 항목을 반복해야하지만 이것은 Python에서 수행하는 것보다 훨씬 빠릅니다.

+0

이것은 거의 내가 원하는 것을 수행합니다. 첫 번째 coloumn있는 '2'에 대한 행을 반환 할 싶습니다. 귀하의 예제에서 단지 배열 ([[2, 3, 4]])를 반환합니다. – Sebastian

+0

OK, 답을 업데이트하겠습니다. –

+0

더 좋습니까? –

0

탁구 거리는 색인되지 않습니다. 이 특정 작업을 배열 크기에서 선형보다 더 효율적으로 수행해야하는 경우에는 numpy가 아닌 다른 것을 사용해야합니다.

+0

각 행을 살펴야한다는 것을 알고 있지만 루프를 사용하고 싶지 않습니다. 루프보다 빠르게 할 수있는 내장 함수가 있기를 바랍니다. – Sebastian

관련 문제