일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 컬렉션 프레임웍
- oracle
- 완주하지못한선수
- WinError5
- streamlit
- 알고리즘
- 사이킷런
- REST API
- 파이썬
- 셀레니움
- 차원증가
- 스프링 부트
- h2 데이타베이스
- 스프링 부트3
- 컬렉션 인터페이스
- GIT
- Python
- 쓰레드 풀
- 오라클
- Java
- openai
- URI 원칙
- 머신러닝
- 자바 로그 레벨
- Selenium
- 자바 열거형
- 사이킷런 회귀
- 프로그래머스
- db
- conda remove
- Today
- Total
노트 :
Numpy - 1차원 변환 flatten, ravel, reshape 본문
머신러닝에 인풋 데이터를 집어넣을 때, 1차원으로 변환해주어야 할 때가 있다.
그럴 때, flatten() 메소드를 사용한다.
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
array_1d = array_2d.flatten()
print('array_2d:\n {0}, \n array_1d: \n {1}'.format(array_2d, array_1d))
flatten() 메소드처럼 다차원을 1차원으로 변환해주는 메소드로 ravel()과 reshape()이 있다.
그러나 ravel()과 reshape()을 사용할 때는 주의해야할 점이 있다.
확인을 위해 array_1d의 첫번째 요소를 1에서 11로 변경해 보자.
그 후 array_1d와 오리지널 배열인 arry_2d를 함께 출력해보자.
array_1d[0] = 11
print('array_1d: \n {0}, \n array_2d: \n {1}'.format(array_1d, array_2d))
array_1d만 변경된 것을 알 수 있다.
이제, ravle()메소드를 사용해보자.
array_2d_ravel = np.array([[7, 8, 9], [10, 11, 12]])
array_1d_ravel = array_2d_ravel.ravel()
print('array_2d_ravle:\n {0}, \n array_1d_ravel: \n {1}'.format(array_2d_ravel, array_1d_ravel))
print()
array_1d_ravel[1] = 88
print('array_1d_ravel: \n {0}, \n array_2d_ravel: \n {1}'.format(array_1d_ravel, array_2d_ravel))
ravel()메소드를 사용해도, flatten()메소드처럼 1차원으로 변환이 잘 되는 모습이다.
그런데!
나는 1차원 배열인 array_1d_ravel만 변경했는데 오리지널 배열인 array_2d_ravel도 같이 변경이 되었다.
이는 ravel()메소드를 사용한 배열은 오리지널 배열과 같은 메모리 공간을 공유하기 때문이다.
이제 array_1d_ravel을 변경하여도, array_2d_ravel을 변경하여도 양쪽 다 변경이 될 것이다.
reshape()메소드도 ravel()메소드와 같은 결과를 보여준다.
아래 코드에서 reshape()메소드에 인자로 -1을 넣어주면, 원소의 형태와 관계없이 알아서 1차원으로 변환해준다.
array_2d_reshape = np.array([[13, 14, 15], [16, 17, 18]])
array_1d_reshape = array_2d_reshape.reshape(-1)
print('array_2d_reshape:\n {0}, \n array_1d_reshape: \n {1}'.format(array_2d_reshape, array_1d_reshape))
print()
array_1d_reshape[2] = 1515
print('array_1d_reshape: \n {0}, \n array_2d_reshape: \n {1}'.format(array_1d_reshape, array_2d_reshape))
이처럼, flatten(), ravel(), reshape()는 모두 다차원 배열을 1차원 배열로 바꾸어주는 유용한 함수이지만 그 특성에 따라 사용할 때 잘 구분해서 사용해주어야 한다.
'Python' 카테고리의 다른 글
Streamlit 설치 (0) | 2023.01.28 |
---|---|
Pandas - DataFrame과 list, dict, ndarray 상호 변환 (0) | 2022.11.27 |
Pandas - DataFrame 가공하기(feat.apply()) (0) | 2022.11.06 |
Tqdm - 진행율 표시하기(progress bar) (0) | 2022.10.23 |
정규표현식 (Regular Expressions) (0) | 2022.10.03 |