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)
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
chainer의 connection을 괴롭히고 새로운 층을 만든다 (1)GPU GTX1070 우분투 14.04 chainer 1.14.0 chainer에서 최신 모델을 구현할 때는 links/connection이나 functions/connection을 괴롭힐 필요가 있다. 그래서 가장...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.