Notice
Recent Posts
Recent Comments
Link
초보 개발자의 일기
NumPy - ndarray 생성, reshape() 본문
ndarray를 편리하게 생성할 수 있는 방법이다.
arange
arange 메소드를 이용하면 일일히 값을 입력하지 않아도 쉽게 ndarray를 생성할 수 있다.
sequence_array = np.arange(20)
print(sequence_array)
print(sequence_array.dtype, sequence_array.shape)
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
int32 (20,)
zeros
zeros 메소드를 이용하면 모든 값이 0으로 된 ndarray를 생성할 수 있다.
zero_array = np.zeros((3,2)) # default = float
print(zero_array)
print(zero_array.dtype, zero_array.shape)
[[0. 0.]
[0. 0.]
[0. 0.]]
float64 (3, 2)
ones
ones 메소드를 이용하면 모든 값이 1로 된 ndarray를 생성할 수 있다.
one_array = np.ones((3,2), dtype='int32')
print(one_array)
print(one_array.dtype, one_array.shape)
[[1 1]
[1 1]
[1 1]]
int32 (3, 2)
다음은 생성한 ndarray의 shape을 변경하는 방법이다.
reshape() - 기본
array1 = np.arange(21)
print('array1:\n', array1)
array2 = array1.reshape(7,3)
print('array2:\n',array2)
array3 = array1.reshape(3,7)
print('array3:\n',array3)
array1: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]
array2: [[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]
[12 13 14]
[15 16 17]
[18 19 20]]
array3: [[ 0 1 2 3 4 5 6]
[ 7 8 9 10 11 12 13]
[14 15 16 17 18 19 20]]
reshape() - 특정 차원에 고정된 형태로 변환
reshape()에 -1 인자값을 부여하여 shape 구조를 변환할 수 있다.
array1 = np.arange(10) # 예시용 ndarray 생성
print(array1)
[0 1 2 3 4 5 6 7 8 9]
Column axis 크기는 5에 고정하고 Row axis 크기는 자동 변환
# 즉 2x5 형태로 변환
array2 = array1.reshape(-1,5)
print('array2 shape:',array2.shape)
print('array2:\n', array2)
array2 shape: (2, 5)
array2: [[0 1 2 3 4]
[5 6 7 8 9]]
Row axis 크기는 5로 고정하고 Column axis 크기는 자동변환
# 즉 5x2 형태로 변환
array3 = array1.reshape(5,-1)
print('array3 shape:',array3.shape)
print('array3:\n', array3)
array3 shape: (5, 2)
array3: [[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
자주 사용되는 형태
reshape()는 (-1, 1), (-1, )와 같은 형태로 주로 사용된다.
1차원 ndarray를 2차원으로 변환하거나, 2차원 ndarray를 1차원으로 변환 시 사용한다.
array1 = np.arange(5) # 예시용 ndarray 생성
array1
array([0, 1, 2, 3, 4])
1차원 ndarray를 2차원으로 변환하되, Column크기는 반드시 1이어야 할 때
array2d_1 = array1.reshape(-1, 1)
print("array2d_1 shape:", array2d_1.shape)
print("array2d_1:\n",array2d_1)
array2d_1 shape: (5, 1)
array2d_1:
[[0]
[1]
[2]
[3]
[4]]
2차원 ndarray를 1차원으로 변환할 때
array1d = array2d_1.reshape(-1,)
print("array1d shape:", array1d.shape)
print("array1d:\n",array1d)
array1d shape: (5,)
array1d:
[0 1 2 3 4]
예외 1
reshape을 이용하면 ndarray의 shape을 변경할 수 있지만, 이전 글에서 언급했듯이 ndarray는 정적할당을 받기 때문에 임의로 값을 추가하거나 삭제할 수 없다.
따라서 변환할 수 없는 shape구조를 입력하면 오류가 발생한다.
# 변환할 수 없는 shape구조를 입력하면 오류 발생.
array1.reshape(4,3)
예외 2
reshape에 -1을 적용해도 변환이 불가능한 형태로의 변환을 요구할 경우 오류가 발생한다.
array1 = np.arange(10)
array4 = array1.reshape(-1, 4)
예외 3
reshape의 -1인자는 Column 또는 Row 둘 중 반드시 한쪽에만 입력해야 한다.
array1.reshape(-1, -1)
※ 이지북스의 파이썬 머신러닝 완벽 가이드를 바탕으로 한 학습 기록입니다 ※
'소소한 공부 일기 > 데이터 분석' 카테고리의 다른 글
Pandas - Object creation (0) | 2021.05.05 |
---|---|
NumPy - 선형대수 연산 (0) | 2021.05.05 |
NumPy - ndarray의 정렬 (0) | 2021.05.05 |
NumPy - ndarray의 데이터 세트 선택하기 (0) | 2021.05.04 |
NumPy - ndarray 개요 (0) | 2021.05.03 |
Comments