2017-12-16 21 views
-2

파이썬에 2D 배열이 있다고 가정합니다. 나는 가장 높은 값을 갖는 엘레멘트의 색인을 찾을 필요가있다.Python : 2D 배열에서 최대 값을 갖는 요소 중 하나의 인덱스를 식별합니까?

그러나 가장 높은 값을 갖는 요소가 여러 개있을 수 있습니다. 나의 목표는 그들 중 어느 하나의 색인을 찾는 것이고, 선호는 시간과 공간의 복잡성을 줄이는 것이다.

어떻게하면됩니까?

한 가지 방법은 배열의 최대 값을 찾는 것입니다. 그런 다음 배열의 최대 값과 일치하는 모든 요소를 ​​비교하고 첫 번째로 일치하는 요소의 인덱스를 가져옵니다. 그러나 이것이 이것이 최선의 방법인지 확실하지 않습니다.

다음

당신은 각 행의 최대 요소의 인덱스 ("J")를 얻기 위해 단지 필요 나는 현재

myarray = np.array([[0] * c for i in range(r)]) #r and c are number of rows and columns 
    max_myarray = np.argmax(myarray) 
    for i in range(r): 
     for j in range(c): 
     if (myarray[i][j]==max_myarray): 
      row_index=i 
      column_index=j 
+0

을 사용하여 수행 할 수있는 마지막 발생을 발견하려면? –

+0

@Billa 좋아요,이 포럼에 약간 새로운데, 최대한 빨리 업로드하겠습니다. 죄송합니다. –

+0

@NilsWerner 예, 더 나은 컨텍스트를 제공하도록 코드를 업로드하겠습니다. –

답변

0

을 사용하고 코드입니다. 2D 배열에서 최대 요소를 갖는 행을 선택하십시오. 다음은 당신이 유용하게 사용할 수있는 샘플 코드입니다 :

N.B : 당신은 그냥 인쇄 문을 변경 파이썬 2.7을 사용하는 경우이 코드를 파이썬 3로 작성되었습니다.

my_array=[[1,3,4],[5,7,6],[7,3,4]] 
max_i=0 
max_element=0 
max_j=0 
i=0 
for row in my_array: 
    if max(row)>max_element: 
     max_j=row.index(max(row)) 
     max_i=i 
     max_element=max(row) 
    i+=1 
print(max_i,max_j) 
+0

하지만 최대 값을 갖는 두 요소가 있고 같은 행에 있으면 어떻게 될까요? –

+0

행에 최대 값을 갖는 첫 번째 요소의 인덱스를 반환합니다. –

+0

max_j = row.index (max (row)) 행에서이 오류가 계속 발생합니다. 'numpy.ndarray'객체에 'index'속성이 없습니다. –

0

최대 위치가 필요합니까? 항상 그러나 첫 번째

numpy.unravel_index(numpy.argmax(A), A.shape)) # (4, 0) 

귀하의 예제 코드를 얻을 당신이 NumPy와를 사용하고

numpy.unravel_index(A.size - 1 - numpy.argmax(A[::-1, ::-1]), A.shape) # (4, 4)