2012-01-07 2 views
8

최대 값이 대부분 두 번 이상 나타나는 numpy.ndarray가 있습니다.numpy.ndarray에서 최대 값의 마지막 발생을 찾는 방법

편집 : 저자는 더 나은,

을 말한다 또는 때문, numpy.argmax: how to get the index corresponding to the *last* occurrence, in case of multiple occurrences of the maximum values에서 미묘하게 다른이 배열의 최대 값의 모든 발생 지표의 목록을 얻을 수 있습니다?

내 경우는리스트의 취득에 을 입증 할 수있는 반면 매우 비싼

numpy.argmax 같은 것을 사용하여 최대 값의 마지막에 검출 된 위치의 인덱스를 찾을 수 있습니까? 나는 가 마지막에 출현하는 위치의 인덱스없는이 2

import numpy as np 
a=np.array([0,0,4,4,4,4,2,2,2,2]) 
print np.argmax(a) 
즉 최초로 검출 된 위치의 인덱스를 돌려줍니다 예를 들어, 모든 항목의 배열을 (수백이있을 수 있기 때문에)

찾으려면

그러나 출력하려면 5

+0

가능 중복 [numpy.argmax :에 대응하는 인덱스를 얻는 방법 * * 마지막 발생 최대 값을 여러 번시 (http://stackoverflow.com/questions/7038975/ numpy-argmax-how-to-the-get-the-the-last-of-the-ca에 대응) – outis

+0

작성자는 모든 발생의 색인과 거기에 주어진 해결책을 원한다.'occurences = np.where (a == a.max())'모든 경우에 매우 비쌀 수있는 모든 최대 값의 배열을 생성합니다 –

+0

답변은 모든 발생을 처리하는 방법 만 처리하지만 질문자는 두 가지 모두를 요구하므로 "가능한 중복" "복제"하기보다는. – outis

답변

14

numpy.argmax 경우에만 첫 번째 항목의 인덱스를 반환합니다. 당신은 배열의 반대보기로 argmax을 적용 할 수 :

import numpy as np 
a = np.array([0,0,4,4,4,4,2,2,2,2]) 
b = a[::-1] 
i = len(b) - np.argmax(b) - 1 
i  # 5 
a[i:] # array([4, 2, 2, 2, 2]) 

참고 NumPy와 배열을 복사하지 않는 대신 역순으로 액세스하는 stride 원래의 뷰를 작성합니다.

id(a) == id(b.base) # True 
+0

마지막으로 발생한 색인을 가져 오는 동등한 함수가 있습니까? 또한 배열을 역전시키지 않으면 메모리 사용량이 두 배로 증가하는 것은 말할 것도없고 O (n) 연산이 될까요? –

+3

반대보기가 매우 효율적이기 때문에 또 다른 기능이 있습니다. – outis

관련 문제