Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Archives
Today
Total



GitHub Contribution
Loading data ...
관리 메뉴

초보 개발자의 일기

NumPy - ndarray 생성, reshape() 본문

소소한 공부 일기/데이터 분석

NumPy - ndarray 생성, reshape()

Da다 2021. 5. 4. 21:45

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