상위 목록: 하위 목록: 작성 날짜: 읽는 데 11 분 소요

축 추가

import numpy as np

arr = np.array([1, 2, 3, 4])

print(arr)
print(arr[np.newaxis])
print(arr[:, np.newaxis])
결과
[1 2 3 4]
[[1 2 3 4]]
[[1]
 [2]
 [3]
 [4]]

indexnp.newaxis를 이용하여 차원을 확장할 수 있습니다.

부분에 np.newaxis를 입력시, 차원을 한 단계 추가합니다.

부분에 np.newaxis를 입력시, 차원을 분해한 후 한 단계 추가합니다.


import numpy as np

arr = np.array([[1, 2],
              [3, 4]], dtype=int)

new_arr = arr[:, np.newaxis]

print(arr)

print(new_arr)
print(new_arr[1][0])
print(new_arr[1][0][1])
결과
[[1 2]
 [3 4]]
[[[1 2]]

 [[3 4]]]
[3 4]
4

배열[:, :, :, ... , np.newaxis]를 이용하여 차원을 확장시킬 수 있습니다.

차원이 증가함에 따라 index의 표시법이 같이 증가합니다.

주로, 슬라이싱를 통한 연산에 사용됩니다.


import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([1, 2, 3])

print(arr1[np.newaxis] * arr2)
print(arr1[:, np.newaxis] * arr2)
print("\n")
print(arr1[np.newaxis] + arr2)
print(arr1[:, np.newaxis] + arr2)
결과
[[1 4 9]]
[[1 2 3]
 [2 4 6]
 [3 6 9]]


[[2 4 6]]
[[2 3 4]
 [3 4 5]
 1[4 5 6]]

차원을 어떻게 나누느냐에 따라, 결과가 상이하게 달라집니다.

주로, 배열[:, np.newaxis] 형태로 계산을 진행합니다.



차원 확장 및 축소

import numpy as np

arr = np.array([[1], [2], [3]])

expansion = np.expand_dims(arr, axis=0)
reduction = np.squeeze(arr, axis=1)

print(arr)
print(expansion)
print(reduction)
결과
[[1]
 [2]
 [3]]
[[[1]
  [2]
  [3]]]
[1 2 3]

Numpy 함수를 통해서도 차원을 확장하거나 축소할 수 있습니다.

차원을 확장하는 경우, 지정된 축을 대상으로 차원을 확장합니다.

np.expand_dims(배열, 축)을 통해 지정된 축의 차원을 확장할 수 있습니다.

차원을 축소하는 경우, 지정된 축을 대상으로 차원을 축소합니다.

np.squeeze(배열, 축)을 통해 지정된 축의 차원을 축소할 수 있습니다.

만약, 차원 축소 함수에 축을 입력하지 않으면, 1차원 배열로 축소합니다.


import numpy as np

arr = np.array([
    [
        [1, 2],
        [3, 4]
    ],
    [
        [5, 6],
        [7, 8]
    ]
])

expand_dims = np.reshape(arr, (1, 1, 2, 4))
reduction = np.reshape(arr, (4, -1))

print(arr)
print(expand_dims)
print(reduction)
결과
[[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]]
[[[[1 2 3 4]
   [5 6 7 8]]]]
[[1 2]
 [3 4]
 [5 6]
 [7 8]]

만약, 임의의 차원으로 변경하는 경우, reshape를 통해 명시적으로 차원의 형태를 변경할 수 있습니다.

동일 차원을 사용하더라도, reshape 함수의 요소값으로 형태를 변경할 수 있습니다.

reshape 함수는 브로드캐스팅(Broadcasting) 조건을 만족해야 사용할 수 있습니다.

댓글 남기기