numpy 함수 안의 axis 매개 변수의 의미를 간단히 말하다

앞말


numpy는 행렬과 그룹에 대한 연산을 지원하기 때문에 많은numpy의 많은 연산은 조작의 차원 매개 변수인axis를 지정해야 합니다. (물론 이 axis는 기본값을 가지고 있습니다.) 본 블로그는numpy입니다.sum 구화 함수를 예로 들면axis 파라미터의 서로 다른 수치의 의미를 구체적으로 분석한다.

결론부터 말하다


numpy를 설정하다.sum의 입력 행렬은 a.numpy입니다.sum의 반환 행렬은rst입니다.
행렬 a의 형상은 sp=numpy입니다.shape(a), 예를 들어 sp=[m, n, p, q···]
rst의 형태는 sp의 첫 번째 axis 요소를 1로 설정합니다. 즉,

sp'=sp
sp'[axis]=1
numpy.shape(rst)==sp'  .
예: axis=2,
a가 행렬이면
rst의 형상은 다음과 같아야 한다: [m, n, 1, q・・]
rst의 원소 rst[m',n', 1,q'・]에 대한 계산 방법은 다음과 같다.

[제 axis 축 주의] 아래 표식은 1만 취할 수 있습니다.


numpy.sum(a,axis=2)의 내부 계산은 다음과 같습니다.

for i in range(sp[axis]):
    rst[m'][n'][1][q'][・・・]+=a[m'][n'][i][q'][・・・]
결과적으로 제axis 비트가 1로 변한 것을 발견했고 계산 과정은 사실 제axis 축을 훑어보고 sp[axis] 개의 원소를 하나의 원소로 합쳤다.
만약 a가 array라면:
rst의 형상은 다음과 같아야 한다. [m, n, q, ・]

제xis 비트가 바로 사라졌으니 주의하세요


numpy.sum(a,axis=2)의 내부 계산

for i in range(sp[axis]):
    rst[m'][n'][q'][・・・]+=a[m'][n'][i][q'][・・・]
결과적으로 제axis 차원이 없어진 것을 발견했다. 계산 과정은 사실 제axis 축을 두루 훑어보고 sp[axis] 원소를 하나의 원소로 합쳤다.

예를 들어 설명하다


간단하게


import numpy as np
a=np.mat([[1,2,3],[4,5,6]])
a의shape:

print (np.shape(a))
출력: (2,3)
계산:np.sum(a,axis=0)

>>> s0=np.sum(a,axis=0)
>>> s0
matrix([[5, 7, 9]])
[결론부터 말하자면]의 방법에 따르면

axis=0
a의 모양: (2,3)
그래서rst의 형상은: (1,3)
rst의 모든 요소 p,q:
rst[p][q]의 계산 방법은 다음과 같습니다.

for i in range(np.shape(a)[axis]):
     rst[0][q]+=a[i][q]
그래서

rst[0][0]=a[0][0]+a[1][0]=1+4=5
rst[0][1]=a[0][1]+a[1][1]=2+5=7
rst[0][2]=a[0][2]+a[1][2]=3+6=9
그래서 rst는 [[5,7,9]]]
계산numpy.sum(a,axis=1)
a=[[1,2,3],[4,5,6]

>>> s1=np.sum(a,axis=1)
>>> s1
matrix([[ 6],
        [15]])
>>> np.shape(s1)
(2, 1)
>>> 
동일한 분석 방법:
[결론부터 말하자면]의 방법에 따르면

axis=1
a의 모양: (2,3)
그래서rst의 형상은: (2,1)
rst의 모든 요소 p,q:
rst[p][q]의 계산 방법은 (그중 p=0,1이고 q는 0일 수 있음):

for i in range(np.shape(a)[axis]):
     rst[p][0]+=a[p][i]
그래서

rst[0][0]=a[0][0]+a[0][1]+a[0][2]=1+2+3=6
rst[1][0]=a[1][1]+a[1][1]+a[1][2]=4+5+6=15
그래서rst는 [[6],[15]]]입니다.

복잡한 점:


>>> b=np.array([[[1,2,3],[4,5,6],[7,8,9]]])
>>> b
array([[[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]]])
>>> np.shape(b)
(1, 3, 3)
b는 1x3x3,array입니다.
그럼sum(b,axis=2)는 얼마입니까?
표준 답안:

>>> print (np.sum(b,axis=2))
[[ 6 15 24]]
분석 결과:
반환값은 원소rst[p][q]에 대해 1x3 모양의array여야 합니다.

rst[p][q]=a[p][q][0]+a[p][q][1]+a[p][q][2]
예를 들어rst[0][1]=a[0][1][0]+a[0][1][1]+a[0][1][2]=8+5+6=15.
np.sum(b,axis=2)의 첫 번째 줄, 두 번째 원소는 바로 15입니다.

axis 기본값 정보


일반적으로 매트릭스,array에 대한 함수는 axis 매개 변수가 있고 기본값은 None입니다.axis가 None이면 연산은 행렬 (array) 의 모든 원소를 훑어보는 것이고 원소를 하나하나 계산하는 것이다.
보충:python의 일부 함수axis 매개 변수에 대한 이해

요약:


axis=i를 설정하면numpy는 i의 아래 표시가 변화하는 방향을 따라 조작합니다.
물론, 이 i는 0부터 세는 것이니, 프로그래머인 너는 틀림없이 틀리지 않을 것이다.
axis는'축'을 뜻하며, 함수가 장량 (행렬, 등) 에서 조작하는 방향을 지정합니다.
예를 들어 A,A.shape=(3,8,5,7)라는 ndarray가 있다.
그럼sum(A,axis=2)가 계산한 결과의 shape는 (3,8,7)이다.
이 shape가 (3,8,7)의 ndarray 변수 이름이 B라고 가정하면 실제로는
B[i][j][k]=A[i][j][0][k]+A[i][j][1][k]+A[i][j][2][k]+A[i][j][3][k]+A[i][j][4][k]

다음 코드는 당신이 직접 뛰어 보세요.


import numpy as np
A=np.random.randn(3,8,5,7)
print("A.shape=",A.shape)
B=np.sum(A,axis=2)
print("B.shape=",B.shape)
예상 출력:
A.shape= (3, 8, 5, 7)
B.shape= (3, 8, 7)
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.

좋은 웹페이지 즐겨찾기