python 의 np.argmax()및 axis=0 또는 1 에 대한 이해

np.argmax()에 대해 저 는 오랫동안 현혹 되 었 습 니 다.특히 그 중의 axis=1 의 비교 결과 입 니 다.
1.np.argmax()의 이해
1.가장 쉬 운 예
현재 배열 a=[3,1,2,4,6,1]이 있다 고 가정 하면 현재 배열 a 에서 가장 큰 색인 이 얼마 인지 계산 해 야 합 니 다.가장 직접적인 사고방식 은 먼저 0 번 째 수가 가장 크다 고 가정 한 다음 에 이것 과 뒤의 수 를 비교 해서 큰 것 을 찾 으 면 색인 을 업데이트 한다.코드 는 다음 과 같다.

a = [3, 1, 2, 4, 6, 1]
maxindex = 0
i = 0
for tmp in a:
    if tmp > a[maxindex]:
        maxindex = i
    i += 1
print(maxindex)
이 문 제 는 우리 가 argmax 를 이해 하 는 데 도움 을 줄 수 있다.
2.함수 의 해석
1 차원 배열

import numpy as np
a = np.array([3, 1, 2, 4, 6, 1])
print(np.argmax(a))
argmax 는 최대 수의 색인 을 되 돌려 줍 니 다.argmax 는 하나의 매개 변수 axis 가 있 습 니 다.기본 값 은 0 이 고 몇 번 째 차원 의 최대 치 를 표시 합 니 다.
2 차원 배열

import numpy as np
a = np.array([[1, 5, 5, 2],
              [9, 6, 2, 8],
              [3, 7, 9, 1]])
print(np.argmax(a, axis=0))
설명 이 편리 하도록 a 는 이 2 차원 배열 을 나타 낸다.np.argmax(a,axis=0)의 의 미 는 a[0][j],a[1][j],a[2]j 중 최대 치 의 색인 이다.a[0][j]부터 최대 치 색인 은 처음에(0,0,0,0)이 었 고 a[0][j]와 a[1][j]를 비 교 했 을 때 9 는 1,6 보다 5,8 은 2 보다 많 았 기 때문에 최대 치 색인 은(0,0,0,0)에서(1,1,0,1)로 업데이트 되 었 고 a[2][j]와 비 교 했 을 때 7 은 6,9 보다 5 가 많 기 때문에(1,2,2,1)로 업데이트 되 었 다.
다음 출력 을 분석 합 니 다.

import numpy as np
a = np.array([[1, 5, 5, 2],
              [9, 6, 2, 8],
              [3, 7, 9, 1]])
print(np.argmax(a, axis=1))
np.argmax(a,axis=1)의 의 미 는 a[i][0],a[i][1],a[i][2],a[i]3 의 최대 치 색인 이다.a[i][0]부터 a[i][0]에 대응 하 는 색인 은(0,0,0)이다.먼저 최대 치 색인(사고 와 상절 의 간단 한 예 가 완전히 일치)이 라 고 가정 하고 a[0]과 a[0][1]을 비교 한 다음 에 5 가 1,7 이 3 보다 크 기 때문에 최대 치 색인 은(0,0,0)에서(1,0,1)로 업데이트 한 다음 에 a[i][2]와 비교 한 다음 에 9 가 7 보다 크 고(1,0,2)로 업데이트 한 다음 에 a[i][3]와 비교 할 필요 가 없다.최종 값 은(1,0,2)이다.
3 차원 배열

import numpy as np
a = np.array([
              [
                  [1, 5, 5, 2],
                  [9, -6, 2, 8],
                  [-3, 7, -9, 1]
              ],

              [
                  [-1, 5, -5, 2],
                  [9, 6, 2, 8],
                  [3, 7, 9, 1]
              ]
            ])
print(np.argmax(a, axis=0))
np.argmax(a,axis=0)의 의 미 는 a[0][j][k],a[1][j][k](j=0,1,2,k=0,1,2,3)에서 가장 큰 값 의 색인 이다.
a[0][j][k]부터 a[0][j][k]에 대응 하 는 색인 은(0,0,0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0),a[0][k][1][j][k]에 대응 하 는 항목 을 비교 6 이-6 보다 크 고 3 이-3 보다 크 고 9 가-9 보다 크 므 로 이 몇 자리 의 색인 을 업데이트 하면(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)을(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0),(1,0,1,0)...
axis=1 의 상황 을 다시 봅 니 다.

import numpy as np
a = np.array([
              [
                  [1, 5, 5, 2],
                  [9, -6, 2, 8],
                  [-3, 7, -9, 1]
              ],

              [
                  [-1, 5, -5, 2],
                  [9, 6, 2, 8],
                  [3, 7, 9, 1]
              ]
            ])
print(np.argmax(a, axis=1))
np.argmax(a,axis=1)의 의 미 는 a[i][0][k],a[i][1][k](i=0,1,k=0,1,2,3)에서 가장 큰 색인 이다.[[a][0][k][0][0][k]에 대응 하 는 색인 은(0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1),(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)),현재 최대 값(대응 하 는 배열 그룹(9,5,5,8),(9,6,2,8).
다시(9,5,5,8),(9,6,2,8)와 a[2][k]의 대응 항목 을 비교 하면 7 이 5 보다 크 고 7 이 6 보다 크 며 9 가 2 보다 크다.
(1,0,0,1),(1,1,1,1)를(1,2,0,1)로 업데이트 하 는 경우 도 비슷 하 다.
2.axis 에 대한 이해
axis 를 설정 하 는 주요 원인 은 우리 가 여러 차원 의 계산 을 편리 하 게 하 는 것 이다.
예 를 들 어 이해 하 다
예 를 들 면:

a = np.array([[1, 2, 3], 
     [2, 3, 4], 
     [5, 4, 3], 
     [8, 7, 2]])
np.argmax(a, 0)   #  :array([3, 3, 1]
np.argmax(a, 1)   #  :array([2, 2, 0, 0]
axis = 0:
그렇게 생각 하 세 요.0 은 가장 큰 범위 입 니 다.모든 배열 을 비교 해 야 합 니 다.다만 이 배열 들 의 같은 위치 에 있 는 수(제 이 해 는 0 열 비교 출력)를 비교 해 야 합 니 다.

a[0] = array([1, 2, 3])
a[1] = array([2, 3, 4])
a[2] = array([5, 4, 3])
a[3] = array([8, 7, 2])
# output : [3, 3, 1]
axis=1:(줄 비교 출력)
1 과 같 을 때 비교 범위 가 좁 아 지면 각 배열 안의 수의 크기 만 비교 하고 결 과 는 몇 개의 배열 에 따라 몇 개의 결 과 를 얻 을 수 있다.

a[0] = array([1, 2, 3]) #2
a[1] = array([2, 3, 4]) #2
a[2] = array([5, 4, 3]) #0
a[3] = array([8, 7, 2]) #0
특례
이것 은 모두 배열 의 길이 가 일치 하 는 상황 입 니 다.일치 하지 않 으 면 axis 의 최대 치 는 가장 작은 배열 의 길이-1 이 고 초과 하면 오 류 를 보고 합 니 다.
일치 하지 않 을 때 axis=0 의 비교 도 각 배열 의 비교 가 된다.
비교 예 는 아래 와 같다.
배열 길이 가 같 을 때

import numpy as np
a = np.array([
              [
                  [1, 5, 5, 2],
                  [9, -6, 2, 8],
                  [-3, 7, -9, 1]
              ],

              [
                  [-1, 5, -5, 2],
                  [9, 6, 2, 8],
                  [3, 7, 9,1]
              ]
            ])
print(np.argmax(a, axis=0))
print(np.argmax(a, axis=1))
출력
[[0 0 0 0]
[0 1 0 0]
[1 0 1 0]]
[[1 2 0 1]
[1 2 2 1]]
배열 의 길이 가 다 를 때,

  a = np.array([
                  [
                      [1, 5, 5, 2],
                      [9, -6, 2, 8],
                      [-3, 7, -9, 1]
                  ],
    
                  [
                      [-1, 5, -5, 2],
                      [9, 6, 2, 8],
                      [3, 7, 9]
                  ]
                ])
    print(np.argmax(a, axis=0))
 print(np.argmax(a, axis=1))
출력
[0 1 1]
[1 1]
numpy 의 argmax 매개 변수 axis=0/1 개념
numpy 의 argmax 에 대해 서 는 줄 인지 열 검색 인지 기본 적 으로 기억 하지 못 하고 항상 헷 갈 려 서 매번 자 료 를 찾 아야 하 는데 오늘 갑자기 깨 달 았 습 니 다.
먼저 줄 을 서 라,왜 냐?
아래 목록 을 보면 알 수 있 습 니 다.

>>b=np.array([1, 2, 3, 4, 3, 2, 1])
>>np.argmax(b)
>>3
>>np.argmax(b, axis=0)
>>3
기본 axis=0,목록 은 하나의 차원 만 있 고 자 연 스 럽 게 한 줄 데이터 의 최대 색인 입 니 다.
그러면 2 차원 벡터 에 대해 서 는 axis 가 좌표 축의 방향 이지 행렬 의 개념 이 아니 라 는 것 만 기억 해 야 한다.
Numpy 라 이브 러 리 에서:
축 은 1 차원 을 넘 는 배열 의 정의 속성 에 사용 되 고 2 차원 데 이 터 는 두 개의 축 을 가지 고 있 습 니 다.
0 축 은 줄 의 수직 을 따라 아래로 내 려 가 고,1 축 은 열의 방향 을 따라 수평 으로 뻗 는 다.간단하게 말하자면 axis=0 은 크로스(down)를 대표 하고 axis=1 은 크로스(across)를 대표 한다.
그래서 axis=0 은 열 찾기 를 대표 하고 axis=1 은 줄 찾기 를 대표 합 니 다.

>>a = np.array([[1, 5, 5, 2],
               [9, 6, 2, 8],
               [3, 7, 9, 1]])
>>np.argmax(a,axis=0)
>>array([1, 2, 2, 1], dtype=int64)
>>np.argmax(a,axis=1)
>>array([1, 0, 2], dtype=int64)
결론:
argmax 는 최대 수의 색인 을 되 돌려 줍 니 다.argmax 에는 매개 변수 axis 가 있 습 니 다.기본 값 은 0 입 니 다.각 열의 최대 값 을 나타 내 는 색인 입 니 다.axis=1 은 각 줄 의 최대 값 을 나타 내 는 색인 입 니 다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기