[ TIL ]
강의를 들으면서 NumPy를 설치하고 선생님따라 코드 작성하고 실행시켜보는데 이해가 안돼서 따로 찾아봤다.
import numpy as np
arr = np.array([1,2,3,4,5,6])
arr
>>>array([1, 2, 3, 4, 5])
type(arr)
>>>numpy.ndarray
print(arr)
>>>[1 2 3 4 5]
arr_2 = arr.reshape((1,6))
arr_2
>>>array([[1, 2, 3, 4, 5, 6]])
arr.shape
>>>(6,)
arr_2.shape
(1, 6)
여기서 arr.shape는 왜 (6,)이고 arr_2.shape는 왜 (1, 6)인지??
arr는 np.array([1, 2, 3, 4, 5, 6])로 1차원 배열이다.
그래서 print(arr.shape)를 했을 때
- 배열에 6개의 요소가 있고, 1차원이라 (6,)로 표시된다.
- 즉, "길이가 6인 1차원 배열"을 의미한다.
다음으로, arr_2는 arr.reshape((1, 6))로 2차원 배열로 재구성된 배열이다.
그래서 print(arr_2.shape)를 했을 때
- 1개의 행(row)과 6개의 열(columns)을 가져서 (1, 6)으로 표시된다.
- 즉, " 1행 6열의 2차원 배열"을 의미한다.
- reshape을 통해 차원을 추가해서 2차원 배열로 변환되었다.
결국, Numpy 배열의 차원 표현 방식이 저런 것이었다.
- 1차원 배열은 (n,)처럼 단일 숫자로 표현된다. 여기서 n은 요소의 개수.
- 2차원 배열은 (rows, columns) 형식으로 행과 열의 개수를 모두 포함한다.
reshape 메서드
- 차원을 명시적으로 지정할 수 있다.
- (1, 6)을 사용하면 행(row) 1개와 열(column) 6개를 가지는 2차원 배열이 된다.
- 이는 배열에 추가적인 계층을 추가했다고 이해할 수 있다.
이렇게 알고나니까 shape가 뭔지 궁금해서 좀 더 찾아보게 되었다.
Shape는 Numpy 배열의 구조(차원의 크기)를 나타내는 속성이다.
배열의 각 차원별 크기(size)를 튜플(tuple) 형태로 제공한다.
1차원 배열:
shape는 (n,) 형식.
n은 배열의 총 요소 개수.
arr = np.array([1, 2, 3, 4])
print(arr.shape) # (4,)
여기서 (4,)는 "길이 4의 1차원 배열"을 의미.
2차원 배열:
shape는 (rows, columns) 형식.
arr = np.array([[1, 2], [3, 4], [5, 6]])
print(arr.shape) # (3, 2)
(3, 2)는 "3개의 행과 2개의 열"이 있는 배열.
해당 2차원 배열을 3차원으로 바꾼다면?
import numpy as np
# 주어진 2D 배열
arr = np.array([[1, 2], [3, 4], [5, 6]])
# 3D로 변환
arr_3d = arr.reshape(2, 3, 2)
print(arr_3d)
3D 배열:
[[[1 2]
[3 4]
[5 6]]
[[7 8]
[9 10]
[11 12]]]
3D 배열의 shape: (2, 3, 2)
3차원 배열 (다차원 배열):
shape는 (depth, rows, columns) 형식.
arr = np.ones((2, 3, 4))
print(arr.shape) # (2, 3, 4)
(2, 3, 4)는 "2개의 2차원 배열, 각 배열은 3개의 행과 4개의 열"을 의미.
Depth란?
다차원 배열에서 가장 바깥쪽 차원의 개수를 나타내는 용어로 3차원 이상의 배열에서 "배열의 층(layer)"을 의미
- Numpy 배열은 다차원 배열을 지원하며, 각 차원은 행(row), 열(column), 그리고 그 위의 층(layer)으로 구분된다.
- depth는 3차원 배열 이상에서만 나타난다.
- Shape의 첫 번째 값은 depth를 나타냄.
Depth의 시각적 이해
1. 2차원 배열 (depth 없음) Shape (2, 2)
arr = np.array([[1, 2], [3, 4]])
print(arr.shape) # (2, 2)
2. 3차원 배열 (depth 존재) Shape (2, 2, 2)
arr = np.array([
[[1, 2], [3, 4]],
[[5, 6], [7, 8]]
])
print(arr.shape) # (2, 2, 2)
Depth의 예시
예시 1: 3차원 배열
arr = np.ones((4, 3, 2))
print(arr.shape) # (4, 3, 2)
Shape (4, 3, 2):
- 4: 배열의 depth, 즉 4개의 층(layer)로 구성.
- 3: 각 층의 행(row) 수.
- 2: 각 층의 열(column) 수.
예시 2: 4차원 배열
arr = np.zeros((5, 4, 3, 2))
print(arr.shape) # (5, 4, 3, 2)
Shape (5, 4, 3, 2):
- 5: 가장 바깥쪽 배열에 5개의 depth(층)가 있다.
- 4: 각 depth는 4개의 배열을 포함.
- 3: 각 배열의 행 수.
- 2: 각 배열의 열 수.
나의 질문 : 4차원을 이렇게 이해하면 될까요?
답은 YES!
( 나름대로 이해하려고 그림판으로 그려서 튜터님께 질문을 했다.)
그리고 얻은 엄청난 꿀팁 대괄호를 세면 차원의 수가 보인다!
arr = np.array([
[[1, 2], [3, 4]],
[[5, 6], [7, 8]]
])
print(arr.shape) # (2, 2, 2)
이 경우 대괄호가 3개 있으니까 3차원!
그리고 Shape (5, 4, 3, 2)을 예로 들었을 때,
오른쪽 첫번째 숫자 기준으로 왼쪽으로 차원이 하나씩 늘어나고 있는 모습을 보여준다.
Depth를 활용하는 경우
- 이미지 데이터:
- 컬러 이미지는 3차원 배열로 표현된다.
- 예: (height, width, color_channels)
- 여러 이미지를 한 번에 처리하려면 4차원 배열로 확장된다.
- 예: (num_images, height, width, color_channels)에서 num_images가 depth 역할.
- 컬러 이미지는 3차원 배열로 표현된다.
- 딥러닝 데이터:
- 딥러닝 모델에서 입력 데이터를 batch 단위로 처리할 때, 배치 크기가 depth가 된다.
- 예: (batch_size, height, width, features).
- 딥러닝 모델에서 입력 데이터를 batch 단위로 처리할 때, 배치 크기가 depth가 된다.
- 3D 시뮬레이션 및 과학 데이터:
- 시간 축(time step)이나 공간 축을 포함한 다차원 데이터에서 depth가 유용하다.
'Today I learned' 카테고리의 다른 글
판다스의 고오급 기능 (3) | 2024.11.28 |
---|---|
2024.11.28 TIL (판다스-데이터변형) (0) | 2024.11.28 |
2024.11.26 TIL (+프로그래머스,SQL 질문과 답) (2) | 2024.11.26 |
2024.11.22 TIL(AI 9기) (0) | 2024.11.22 |
2024.11.21 TIL(AI 9기) (1) | 2024.11.21 |