일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 | 29 | 30 | 31 |
- ack
- cpp
- c++
- 넘파이 배열
- 기계학습
- 파이썬
- 데이터 분석
- 데이터 마이닝
- 합성곱 신경망
- 네트워크 기초
- NumPy
- 코딩테스트실력진단
- 코테
- Design Pattern
- java
- OOP
- python
- 넘파이 기초
- Machine Learning
- 자바
- 넘파이
- cpp class
- 디자인 패턴
- 클러스터링
- 머신러닝
- 코드트리
- 코딩테스트
- 차원축소
- numpy 기초
- lambda
- Today
- Total
준비하는 대학생
[NumPy] 확장 슬라이싱 본문
1. 슬라이싱 기본 개념
파이썬에서 슬라이싱은 리스트, 튜플, 문자열 등의 시퀀스 자료형에서 연속된 범위의 데이터를 추출하는 기능을 제공합니다. 슬라이싱은 다음과 같은 형식으로 사용합니다.
sequence[start:stop:step]
여기서 start는 시작 인덱스, stop은 종료 인덱스, step은 간격을 나타냅니다. start와 stop은 생략 가능하며, 생략 시 기본적으로 start는 0, stop은 시퀀스의 길이로 설정됩니다. step은 생략 가능하며, 생략 시 기본적으로 1로 설정됩니다.
2. NumPy 확장 슬라이싱
NumPy에서는 기본 슬라이싱 기능을 확장하여 다차원 배열에서도 적용할 수 있습니다. 각 축(axis)에 대해 슬라이싱을 적용하여 다양한 형태의 데이터를 추출할 수 있습니다.
예시
import numpy as np
arr = np.array([[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11],
[12, 13, 14, 15]])
# 2x2 부분 행렬 추출
sub_arr = arr[1:3, 1:3]
print(sub_arr)
결과
[[ 5, 6],
[ 9, 10]]
3. 음수 인덱스와 슬라이싱
NumPy 확장 슬라이싱에서도 음수 인덱스를 사용할 수 있습니다. 음수 인덱스는 배열의 끝에서부터 역순으로 인덱싱 합니다.
예시
import numpy as np
arr = np.array([[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11],
[12, 13, 14, 15]])
# 마지막 행과 마지막 열을 제외한 부분 행렬 추출
sub_arr = arr[:-1, :-1]
print(sub_arr)
결과
[[ 0, 1, 2],
[ 4, 5, 6],
[ 8, 9, 10]]
4. 홀수 / 짝수 인덱스 추출
NumPy 확장 슬라이싱을 사용하여 홀수 또는 짝수 인덱스의 요소만 추출할 수 있습니다. `step` 인자를 활용하면 간단하게 구현할 수 있습니다.
예시
import numpy as np
arr = np.array([[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11],
[12, 13, 14, 15]])
# 짝수 인덱스 행과 열만 추출
even_arr = arr[::2, ::2]
print(even_arr)
결과
[[ 0, 2],
[ 8, 10]]
5. 브로드캐스팅을 활용한 인덱스 추출
NumPy 확장 슬라이싱을 사용하면 브로드캐스팅을 활용하여 특정 조건을 만족하는 인덱스를 추출할 수 있습니다. 브로드캐스팅은 다차원 배열의 모양이 다른 경우에도 적용할 수 있게 해 줍니다.
예시
import numpy as np
arr = np.array([[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11],
[12, 13, 14, 15]])
# 값이 5보다 큰 요소만 추출
mask = arr > 5
result = arr[mask]
print(result)
결과
[ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
NumPy 확장 슬라이싱을 이해하고 활용하면 다차원 배열에서 원하는 형태와 조건의 데이터를 쉽게 추출하고 가공할 수 있습니다. 이 기능을 통해 데이터 분석과 처리 과정이 더욱 효율적이고 간편해질 것입니다.
6. 행과 열 전환
NumPy 확장 슬라이싱을 사용하면 배열의 행과 열을 쉽게 전환할 수 있습니다. 이를 통해 배열의 구조를 변경하거나 전치된 배열을 얻을 수 있습니다.
예시
import numpy as np
arr = np.array([[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11],
[12, 13, 14, 15]])
# 전치 행렬(transpose) 구하기
transpose_arr = arr.T
print(transpose_arr)
결과
[[ 0, 4, 8, 12],
[ 1, 5, 9, 13],
[ 2, 6, 10, 14],
[ 3, 7, 11, 15]]
또는 np.newaxis를 사용하여 새로운 축을 추가하고 배열의 모양을 변경할 수 있습니다.
예시
import numpy as np
arr = np.array([0, 1, 2, 3])
# 1D 배열을 2D 행렬로 변환
row_vector = arr[np.newaxis, :]
print(row_vector)
# 1D 배열을 2D 열벡터로 변환
column_vector = arr[:, np.newaxis]
print(column_vector)
결과
[[0, 1, 2, 3]]
[[0],
[1],
[2],
[3]]
7. 다차원 배열 슬라이싱과 인덱싱 결합
NumPy 확장 슬라이싱을 사용하면 다차원 배열에서 슬라이싱과 인덱싱을 동시에 사용할 수 있습니다. 이를 통해 원하는 형태의 부분 배열을 추출할 수 있습니다.
예시
import numpy as np
arr = np.array([[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11],
[12, 13, 14, 15]])
# 첫 번째 열(column) 추출
first_column = arr[:, 0]
print(first_column)
# 두 번째 행(row) 추출
second_row = arr[1, :]
print(second_row)
결과
[ 0, 4, 8, 12]
[4, 5, 6, 7]
8. 슬라이싱을 이용한 배열 수정
NumPy 확장 슬라이싱을 사용하여 배열의 일부분을 수정할 수도 있습니다. 슬라이싱을 통해 추출한 부분 배열에 값을 할당하여 원본 배열을 간편하게 변경할 수 있습니다.
예시
import numpy as np
arr = np.array([[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11],
[12, 13, 14, 15]])
# 첫 번째 열(column)의 모든 값을 99로 변경
arr[:, 0] = 99
print(arr)
결과
[[99, 1, 2, 3],
[99, 5, 6, 7],
[99, 9, 10, 11],
[99, 13, 14, 15]]
9. 결론
NumPy 확장 슬라이싱은 다차원 배열에서 원하는 형태와 조건의 데이터를 쉽게 추출하고 가공할 수 있는 강력한 도구입니다. 데이터 분석, 이미지 처리, 머신 러닝 등 다양한 분야에서 효율적으로 데이터를 처리하는 데 큰 도움이 됩니다.
'Programming > Machine learning' 카테고리의 다른 글
[기계학습] 군집분석 - 계층적 클러스터링 (0) | 2023.03.17 |
---|---|
[NumPy] random 난수 생성 (0) | 2023.03.16 |
[NumPy] sort 정렬 (0) | 2023.03.15 |
[NumPy] unique 함수 (0) | 2023.03.14 |
[NumPy] 인덱싱 (2) | 2023.03.13 |