Data Preprocessing - Numpy ndarray (1)

Numpy ndarray 살펴보기 (1) : 만들기, 데이터타입, 형변환, reshape


Numpy ndarray N차원(Dimenstion) Array

내용 ​ ndarry 만들기

​ 특정타입 ndarry 만들기

​ 형 변환

​ reshape


데이터 차원

scalar : 상수값 - 예) 10, 3.14, 'home'
vector : 1차원 - 예) [10, 20, 30]
matrix : 2차원 - 예) [  [10, 20, 30], [100, 200, 300] ]   2x3(2행3열)
3차원 - 예) [ [ [10, 20, 30], [100, 200, 300] ], [ [ 40, 50, 60], [400, 500, 600] ] ]  2x2x3


Numpy ndarray 만들기

import numpy as np

아래와 같이 numpy로 array를 만든다.

arr = np.array( [10,20,30] )
print(arr)
print(type(arr))
arr
[10 20 30]
<class 'numpy.ndarray'>
array([10, 20, 30])

np.array로 만든 변수의 type을 확인해 보면 <class ‘numpy.ndarray’> 로 확인된다.

numpy ndarray를 만들었다.

비교를 위해서 numpy array가 아닌 파이썬의 일반 리스트로 변수를 만들어서 type을 확인하면 아래와 같다.

my = [10,20,30]
print(my)
print(type(my))
[10, 20, 30]
<class 'list'>

type이 <class ‘list’>로 확인된다. 일반 리스트 타입이다.

numpy arrary는 데이터 타입이 ndarray로 설정됨을 기억하자.

2차원 ndarray를 만들어 보자. 아래와 같이 하면 된다.

arr2 = np.array([ [10,20,30], [100,200,300] ])
print(type(arr2))
arr2
<class 'numpy.ndarray'>
array([[ 10,  20,  30],
       [100, 200, 300]])

반환하는 값은 ndarray 라는 type의 object 임을 기억하자.


특정 타입 ndarray

아래와 같이 특정 type의 ndarray를 만들 수 있다.

# 데이터타입(dtype) int32인 ndarray 만들기
arr3 = np.int32([10,20,30])
arr3
array([10, 20, 30], dtype=int32)
# dtype float32인 ndarray 만들기

arr4 = np.float32([10,20,30])
arr4
array([10., 20., 30.], dtype=float32)

데이터 타입을 지정하지 않고, ndarray를 만들면 dtype int64로 만들어진다.

arr = np.array([11,22,33,44,55])
arr.type
dtype('int64')


형 변환

astype() 멤버 함수로 데이터의 type을 변경 할 수 있다.

arr1 = arr.astype(np.float32)
arr1
array([11., 22., 33., 44., 55.], dtype=float32)


Reshape

reshape() 함수로 데이터의 행,열을 재배치 할 수 있다.

arr2 = np.array([1,2,3,4,5,6])
arr2
array([1, 2, 3, 4, 5, 6])

위에 보이는 arr2는 1차원 데이터인데, 이를 아래와 같이 reshape() 해서 2차원 데이터로 만들 수 있다.

arr2.reshape(2,3)
array([[1, 2, 3],
       [4, 5, 6]])

reshape()에 -1값을 넣으면 자동으로 계산하라는 의미가 된다.

아래 예제에서 reshape(-1,3)은 열을 3개로 하고, 행은 자동으로 맞추라는 의미가 된다.

arr2.reshape(-1,3)
array([[1, 2, 3],
       [4, 5, 6]])
arr2.reshape(3,-1)
array([[1, 2],
       [3, 4],
       [5, 6]])

3차원 데이터로의 변환도 가능한다.

arr2.reshape(-1,2,3)
array([[[1, 2, 3],
        [4, 5, 6]]])

reshape(-1)은 현재 데이터의 차수와 상관없이 모든 데이터를 1차원으로 풀어 놓으라는 의미가 된다.

arr3 = np.array([[10,20,30],[100,200,300]])
arr3
array([[ 10,  20,  30],
       [100, 200, 300]])
arr3.shape
(2, 3)
arr3.reshape(-1)
array([ 10,  20,  30, 100, 200, 300])