1. numpy 모듈 & ndarray 이해
1) numpy를 사용하는 이유
- 성능 : 파이썬 리스트 보다 빠름
- 메모리 사이즈 : 파이썬 리스트보다 적은 메모리 사용
- 빌트인 함수 : 선형대수, 통계관련 여러 함수 내장
2) ndarray란
N 차원(Dimenstion) 배열(Array) 객체
3) ndarray의 이용: 아래 첨부한 jupyter notebook 코드 화면을 통해 더 자세히 알 수 있다.
1. ndarray의 생성: np.array 이용 또는 np.arange이용
2. ndarray의 shape 확인: ndarray.shape 속성이용
3. ndarray의 dimension확인: ndarray.dim 속성 이용
1차원)
array1 = np.array([1, 2, 3])
print(array1) #[1 2 3]
array1.ndim #차원 확인 1
array1.shape #shape 확인 (3,) #주의! 1차원일 때는 요소 개수만 나옴
2차원)
array2 = np.array([[1, 2, 3], [4, 5, 6]])
print(array2) #[[1 2 3]
#[4 5 6]]
array2.ndim #차원 확인 2
array2.shape #shape 확인 (2,3)
4. ndarray 내의 데이터 타입 확인: ndarray.dtype 이용
※ 헷갈려.. 변수 자체의 데이터 타입 확인: type([변수명]), ndarray 내의 데이터 타입 확인: [ndarray명].dtype
ndarray 내의 데이터 타입은 숫자, 문자열, boolean 등 모두 가능하다. 그러나! ndarray내의 테이터 타입은 통일되어야 한다.
(숫자형: int(8bit, 16bit, 32bit), unssigned int형(8bit, 16bit, 32bit), float형(16bit, 32bit, 64bit, 128bit), complex형)
즉,
[1 2 3] (o)
[1.1 , 2.2, 3.3](o)
[True False True] (o)
['하하' '키키' '호호'] (o)
[1 2.3 'hello'] (x)
list1 = [1, 2, 3]
print(type(list1))#<class 'list'>
array3 = np.array(list1)
prinnt(type(array3)) #<class 'numpy.ndarray'>
print(array3.dtype) #int32
print(array3) #[1 2 3]
5. ndarray 데이터타입 변환: astype() 이용
이런 데이터 타입 변경은 대용량 데이터를 ndarray로 만들 때 메모리를 절약하기 위해 자주 사용한다. 이런 데이터타입 변환으로 메모리를 절약한는 것이 새발의 피처럼 느껴졌는데.. 책을 읽고 난 후에 생각이 바뀌었다.
'파이썬 기반의 머신러닝 알골리즘은 대부분 메모리로 데이터를 저체 로딩한 다음 이를 기반으로 알골리즘을 적용하기 때문에 대용량의데이터를 로딩할 때는 수행 속도가 느려지거나 메모리 부족으로 오류가 발생할 수 있다. - 머신러닝 파이썬 완벽가이드 18p'
array_int = np.array([1, 2, 3])
array_float = array_int.astype('float64')
print(array_float.dtype) #float64
6. ndarray의 차원과 크기를 변경: reshape()
array1 = [0 1 2 3 4 5 6 7 8 9]
array2 = array1.reshape(2, 5)
array2 # [[0 1 2 3 4],
# [5 6 7 8 9]]
가 된다. 또한
reshape(-1, 5)와 같이 인자에 -1을 부여하면 -1에 해당하는 axis의 크기는 가변적이되 -1이 아닌 인자값에 해당하는 axis크기는 주어진 인자값으로 고정하여 ndarray의 shape를 변환한다.
array1 = [0 1 2 3 4 5 6 7 8 9]
array2 = array1.reshape(-1, 5)
array2.shape() #(10/2 로 가변적으로 변화, 5로 고정) 따라서 (2, 5)가 된다.
※ 그리고! 머신런닝의 API 인자로 주어져야할 때, 요구하는 형식에 맞게 줘야하는데 주로 1차원 ndarray를 명확하게 2차원 ndarray로 변환하여 입력하기를 원하거나, 또는 반대의 경우가 있다. 이때는 reshape(-1, 1)와 reshape(-1,) 로 변환이 많이 사용된다.
array1d = [0 1 2 3 4]
array2d = array1d.reshape(-1, 1) #2차원으로 변환하되 column axis의 크기가 1로 고정
array2d # [[0][1][2][3][4]]
array2d = [[0][1][2][3][4]]
array1d = array2d.reshape(-1,) #1차원으로 변환
array1d #[0 1 2 3 4]
import numpy as np
import matplotlib.pyplot as plt
#numpy array 생성
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
plt.plot(x, y)
2. ndarray 생성¶
- np.array 함수 이용
- np.arange 함수 이용
방법1. np.array 함수 이용¶
x = np.array([1, 2, 3]) #1차원
print(x)
y = np.array([[1, 2, 3] , [14, 32,42123]])
print(y)
방법2. np.arange 함수 이용¶
x = np.arange(10)
x
y = np.arange(0, 10, 2)
y
np.ones, np.zeros로 생성 : tuple이용¶
np.ones((4, 5))
np.ones((2, 3, 4)) #3차원 : 3행 4열짜리 행렬이 2개가 있다
np.zeros((2, 2, 3)) #모든 원소가 0
np.empty, np.full로 생성하기¶
- np.empty : 어떤 값도 상관없이 임의로 초기화해줘서 생성하는 행렬
- np.full : 특정 숫자로만 채워진 행렬
np.empty((2, 4))
np.full((2, 2, 3), 7)
np.eye로 생성하기 : 단위행렬 생성¶
np.eye(5) #대각선만 1이고 나머지는 다 0인 단위 행렬 만들기
np.linspace로 생성하기¶
np.linspace(1, 10, 3) #start와 end를 포함해서 모든 원소간의 차가 같도록 몇 개로 나누어라
np.linspace(1, 10, 4)
reshape 함수 사용¶
: ndarray의 형태, 차원을 바꾸기 위해 사용
x = np.arange(1, 16)
print(x)
x.shape
x.reshape(3, 5)
random 서브 모듈을 이용한 ndarray 생성¶
1. rand 함수 : [0, 1) 사이의 랜덤 값이 생성¶
x = np.random.rand(2, 3)
x
2. randn 함수 : normal distribution(정규분포) 로 샘플링 된 랜덤 ndarray 생성¶
x = np.random.randn(3, 4)
x
3. randint 함수 : 특정 정수 사이에서 랜덤하게 샘플링¶
x = np.random.randint(3, 8, (4, 5)) #randint(low, high=None, size=None, dtype='l')
x
seed 함수 : 랜덤한 값을 동일하게 다시 생성하고자 할 때 사용¶
np.random.seed(100)#아무 숫자나 주어도 됨 랜덤하지만 이 숫자에 관련된 고정된 수
np.random.randn(3, 4)
choice 함수 : 주어진 1차원 ndarray로 부터 랜덤으로 샘플링하는 것이다.¶
- 정수가 주어진 경우, np.arange로 간주
np.random.choice(100, size =(3, 4))
x = np.array([1, 2, 3, 1.5, 3.5])
np.random.choice(x, (2, 2)) #x 중에서 2*2 즉 4개를 뽑아서(중복 허용(replace = True로 되어있어서)) arange 만든다.
np.random.choice(x, (2, 2), replace = False)
확률 분포에 따른 ndarray생성¶
uniform 함수 이용¶
np.random.uniform(1.0, 3.0, (2, 2)) #uniform 확률 분포([low, high) )에서 랜덤 샘플링
normal 함수 이용¶
np.random.normal(size = (3, 4))
'Data Science > Machine Learning' 카테고리의 다른 글
Evaluation2. 회귀의 성능 평가 지표(MAE, MSE, RMSE, R제곱) (0) | 2020.09.28 |
---|---|
Evaluation1 - 분류 모델 성능 지표 (Accuracy, Confusion Matrix, Precision, Recall, F1 score, ROC AUC ) (0) | 2020.09.28 |
Sklearn 익히기 - train/test data set 분리 및 Cross Validation (0) | 2020.09.28 |
2. numpy - ndarray 인덱싱 & 슬라이싱 이해 (0) | 2020.09.15 |
Machine Learning 마인드맵 (0) | 2020.04.30 |