[Python에 의한 과학·기술 계산] 정방 행렬의 최대(최소) 요소의 행·열의 인덱스의 취득, numpy

소개



정방 행렬의 요소의 최대치가 되는 인덱스의 행 번호·열 번호를 구합니다.
과학·기술 계산에서는 자주 하는 작업입니다. numpy.argmax 메소드를 사용합니다.

테스트에 사용할 행렬 C를 구축합니다.
C=np.array( [[1,2,3,-4],[2,5,4,0],[3,4,1,1],[-4,0,10,2]])



C의 최대 값은 인덱스 [3,2]에 있습니다.
그리고 이것을 추구하기 위해
np.argmax(C)

하지만 불행히도 인덱스를 0에서 일련 번호인 "14"가 반환되는 것만으로, 원하는 행·열의 요소 번호인 [3,2]를 얻을 수 없습니다.

이 논문에서는 위의 [3,2]를 얻는 코드를 만듭니다.

# 더 간단하게 할 수있는 방법이 있으면 알려 주시면 감사하겠습니다. .

추가 2017년 10월 5일



Satoshi Terasaki는 가장 쉬운 방법을 가르쳐 주었습니다. Satoshi Terasaki, 고마워요!
C=np.array( [[1,2,3,-4],[2,5,4,0],[3,4,1,1],[-4,0,10,2]])
np.argwhere(C == C.max())

그냥 괜찮습니다.

비대각 요소의 최대값 등도 찾아보면 간단한 방법이 있을지도 모릅니다.
알면 업데이트하겠습니다.

코드



매우 간단합니다.
요약하면 행 수의 숫자를 계산하기 위해 행렬의 크기 (지금의 경우 4)로 나눌 수있는 최대 정수 값이 열의 인덱스 번호와 나머지가 행의 인덱스 번호에 해당하므로 파이썬 내장 함수인 "//"와 "%"를 사용하면 ok입니다.
#行列Cの定義
C=np.array( [[1,2,3,-4],[2,5,4,0],[3,4,1,1],[-4,0,10,2]])
index=np.argmax(C)
# メイン
index_list=[]
i = index // len(C)  # 行のインデックス番号の取得
j = index % len(C) # 列のインデックス番号
index_list.append(i)
index_list.append(j)

print(index_list)

결과



[3, 2]

원하는 결과를 얻었습니다.

발전



이하, 다양한 이용 장면을 생각합니다.

비대각 요소의 최대값



비대각 요소의 최대 값을 찾는 경우,
먼저 대각선 요소를 0으로 만든 다음 위의 코드를 실행합니다.
C=np.array( [[21,2,3,-4],[2,5,4,0],[3,4,1,1],[-4,0,10,2]])

for i in range(len(C)) :
    C[i,i] = 0


#
index_list=[]
index=np.argmax(C)
i = index // len(C)
j = index % len(C)
index_list.append(i)
index_list.append(j)

print(index_list)

결과:



숫자가 21인 [0,0]이 아니라 제대로 [3, 2]를 반환합니다.

비대각 요소의 절대값의 최대값



행렬이 다음과 같이 음의 큰 수를 포함하는 경우입니다.



절대값이 100인 인덱스 [1,2]를 가져옵니다.

이를 위해서는 요소의 절대 값을 취한 것을 미리 만든 다음 위의 방법을 적용합니다.
#行列Cの定義
C=np.array( [[1,2,3,-4],[2,5,-100,0],[3,4,1,1],[-4,0,10,2]])
D= np.abs(C) # 絶対値をとったものに変換しそれをDとする

index=np.argmax(D)

# メイン
index_list=[]
i = index // len(C)  # 行のインデックス番号¥の取得
j = index % len(C) # 列のインデックス番号
index_list.append(i)
index_list.append(j)

print(index_list)


결과



[1, 2]

좋아.

최소값의 경우



예를 들어 다음 행렬을 생각해 봅시다.
음의 최대값 -10의 인덱스는 [3,1]입니다. 이것을 가져옵니다.



이를 위해 요소의 최소값 인덱스를 반환하는 np.argmin 메서드를 사용합니다.
C=np.array( [[21,2,3,-9],[2,5,4,0],[3,4,1,1],[-4,-10,10,2]])
index=np.argmin(C)

for i in range(len(C)) :
    C[i,i] = 0

#
index_list=[]
i = index // len(C)
j = index % len(C)

index_list.append(i)
index_list.append(j)

print(index_list)


결과



[3, 1]

좋아.

좋은 웹페이지 즐겨찾기