에서 NumPy와의 튜토리얼 처럼 축, 정수로 색인 할 수있다 0
, 열위한 1
행이지만, 그들은 이런 식으로 색인을 왜 이해하지? 그리고 다차원 배열에 대처할 때 각 축의 인덱스를 어떻게 알 수 있습니까?
에서 NumPy와의 튜토리얼 처럼 축, 정수로 색인 할 수있다 0
, 열위한 1
행이지만, 그들은 이런 식으로 색인을 왜 이해하지? 그리고 다차원 배열에 대처할 때 각 축의 인덱스를 어떻게 알 수 있습니까?
답변:
정의에 따라 차원의 축 번호는 배열의 shape
. 인덱싱 중에 해당 차원에 액세스하는 데 사용되는 위치이기도합니다.
예를 들어 2D 배열의 a
모양이 (5,6)이면 a[0,0]
최대 a[4,5]
. 따라서 축 0은 첫 번째 차원 ( "행")이고 축 1은 두 번째 차원 ( "열")입니다. "행"과 "열"이 실제로 의미가없는 더 높은 차원에서는 관련된 모양과 인덱스 측면에서 축을 생각하십시오.
.sum(axis=n)
예를 들어 를 수행하면 차원 n
이 축소되고 삭제되며 새 행렬의 각 값은 해당 축소 된 값의 합계와 동일합니다. 예를 들어, b
shape (5,6,7,8)
가 있고 그렇게 c = b.sum(axis=2)
하면 축 2 (크기가 7 인 차원)가 축소되고 결과는 shape가 (5,6,8)
됩니다. 또한 c[x,y,z]
모든 요소의 합과 같습니다 b[x,y,:,z]
.
다음과 같이 축을 잡을 수 있습니다.
>>> a = np.array([[[1,2,3],[2,2,3]],[[2,4,5],[1,3,6]],[[1,2,4],[2,3,4]],[[1,2,4],[1,2,6]]])
array([[[1, 2, 3],
[2, 2, 3]],
[[2, 4, 5],
[1, 3, 6]],
[[1, 2, 4],
[2, 3, 4]],
[[1, 2, 4],
[1, 2, 6]]])
>>> a.shape
(4,2,3)
(4,2,3)
구조를 명확하게 알 수 있도록 값이 다른 모양의 배열을 만들었습니다 . 다른 축은 다른 '레이어'를 의미합니다.
즉, axis = 0
shape의 첫 번째 차원을 색인화합니다 (4,2,3)
. 첫 번째의 배열을 참조합니다 []
. 4 개의 요소가 있으므로 모양은 4입니다.
array[[1, 2, 3],
[2, 2, 3]],
array[[2, 4, 5],
[1, 3, 6]],
array[[1, 2, 4],
[2, 3, 4]],
array[[1, 2, 4],
[1, 2, 6]]
axis = 1
모양에서 두 번째 차원을 색인화합니다 (4,2,3)
. 레이어의 각 배열에는 2 개의 요소가 있습니다. axis = 0
, ec
array[[1, 2, 3],
[2, 2, 3]]
. 두 가지 요소는 다음과 같습니다.
array[1, 2, 3]
array[2, 2, 3]
세 번째 모양 값은 레이어의 각 배열 요소에 3 개의 요소가 있음을 의미합니다 : axis = 2
. ec에는 3 개의 요소가 array[1, 2, 3]
있습니다. 그것은 명백합니다.
또한 []
시작 또는 끝 의 숫자에서 축 / 치수를 알 수 있습니다 . 이 경우 숫자는 3 ( [[[
)이므로 , 및 axis
에서 선택할 수 있습니다 .axis = 0
axis = 1
axis = 2
일반적으로 axis = 0은 2 차원 및 3 차원의 각 값에 따라 달라지는 첫 번째 차원이있는 모든 셀을 의미합니다.
예를 들어, 2 차원 배열에는 두 개의 해당 축이 있습니다. 첫 번째 축은 행을 가로 질러 수직으로 아래쪽으로 이동하고 (축 0) 두 번째 축은 열을 가로 질러 가로로 이동합니다 (축 1).
3D의 경우 복잡해 지므로 여러 for 루프를 사용하십시오.
>>> x = np.array([[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]],
[[18, 19, 20],
[21, 22, 23],
[24, 25, 26]]])
>>> x.shape #(3, 3, 3)
#axis = 0
>>> for j in range(0, x.shape[1]):
for k in range(0, x.shape[2]):
print( "element = ", (j,k), " ", [ x[i,j,k] for i in range(0, x.shape[0]) ])
...
element = (0, 0) [0, 9, 18] #sum is 27
element = (0, 1) [1, 10, 19] #sum is 30
element = (0, 2) [2, 11, 20]
element = (1, 0) [3, 12, 21]
element = (1, 1) [4, 13, 22]
element = (1, 2) [5, 14, 23]
element = (2, 0) [6, 15, 24]
element = (2, 1) [7, 16, 25]
element = (2, 2) [8, 17, 26]
>>> x.sum(axis=0)
array([[27, 30, 33],
[36, 39, 42],
[45, 48, 51]])
#axis = 1
for i in range(0, x.shape[0]):
for k in range(0, x.shape[2]):
print( "element = ", (i,k), " ", [ x[i,j,k] for j in range(0, x.shape[1]) ])
element = (0, 0) [0, 3, 6] #sum is 9
element = (0, 1) [1, 4, 7]
element = (0, 2) [2, 5, 8]
element = (1, 0) [9, 12, 15]
element = (1, 1) [10, 13, 16]
element = (1, 2) [11, 14, 17]
element = (2, 0) [18, 21, 24]
element = (2, 1) [19, 22, 25]
element = (2, 2) [20, 23, 26]
# for sum, axis is the first keyword, so we may omit it,
>>> x.sum(0), x.sum(1), x.sum(2)
(array([[27, 30, 33],
[36, 39, 42],
[45, 48, 51]]),
array([[ 9, 12, 15],
[36, 39, 42],
[63, 66, 69]]),
array([[ 3, 12, 21],
[30, 39, 48],
[57, 66, 75]]))
0
행1
을 참조하고 열을 참조해야합니다. 나는 당신이 예.sum(axis=0)
를 들어 행을 따라 어떤 합계 를 생각하고 있다고 생각 합니다 (열 합계 생성).