[파이썬 머신러닝] 1. 머신러닝 이해 - 넘파이

2021. 1. 12. 01:05프로그래밍-AI & 빅데이터/머신러닝

걍 라이브러리 잘 쓰는거라서... 

넘파이는 파이썬에서 선형대수 기반 프로그램을 만들도록 지원하는 패키지이다

루프 사용이 없어서 대량 데이터의 배열 연산 성능이 좋단다..

거기에 잘 모르겠지만 로우레벨 언어쪽이랑 호환되는 API도 제공해준단다...

그래서 C나 C++로 작성하고 넘파이에서는 그냥 호출만 하기도 한단다....

와닿지 않는 얘기들이라 나도 모르게 말줄임표를...

 

넘파이는 ndarray라는 자료형을 사용한다.

얘는 N차원의 배열 객체인데, 기존 파이썬과는 다르게 같은 종류의 데이터만 담을 수 있다

이게 나중에 어떻게 쓰일 지는 모르겠지만, 이 단원에서는 그냥 이거 쓰는거만 줄창 배웠다.

 

1. array 생성

 

np로 넘파이를 호출했다.

array라는 메소드는 배열이나 튜플을 ndarray로 바꿔준다.

shape라는 메소드를 찍어보면 (a,b)의 형태로 찍힌다

이는 차원을 말한다. 

예컨데 (2,3)이 찍혔다면 (원소의 갯수, 열갯수)가 된다

 

2. 타입체크

 

dtype메소드를 이용한 element 타입의 확인

 

3. 타입 자동 변환

 

ndarray는 모두 같은 element가 들어가야 한다

astype을 쓰면 억지로 형 변환을 할 수 있음

 

4. 배열 일괄 생성

 

arange: 변수의 크기를 길이로 갖는 배열 생성(연속된 자연수), start와 stop을 정할 수 있다. 이때 stop은 포함되지 않는다

zero: 변수는 차원, element는 모두 0으로

ones: 변수는 차원, element는 모두 1로

5. 배열 구조 바꾸기

 

reshape 메소드에 차원을 설정해주면 바꿔준다

대신 나누어 떨어지는 차원이어야 한다

-1은 행 또는 열을 정했을때 나머지 하나를 알아서 계산해주는 notation

 

6. 인덱싱

 

<단일인덱싱>

 

원소의 index 위치를 지정하면 인덱싱이 된다.

js나 파이썬의 배열 연산처럼 음수는 뒤부터 센다

<2차원 인덱싱>

 

2차원 인덱스도 동일하다

start와 stop을 정해주면 된다.

(단, arrange처럼 이 경우도 stop이전 인덱스까지 잘린다)

<슬라이싱 인덱싱>

 

구간으로 인덱싱 하는 방법

예시의 경우 행(원소)에 대해서는 0에서 1까지 인덱싱을, 열에 대해서는 전체를 인덱싱을 한다. 

 

같은 예시이지만 조금 표현이 다르다

이 경우는 행에 대해서 [0,1]을 인덱싱하는데 이는 0과1에 해당하는 행을 떼어낸다는 뜻(0:1과 다르다)

그리고 열은 2 위치에 있는 열만 인덱싱

그러므로 0의 위치 행 [1,2,3], 1의 위치 행 [4,5,6]이 떼어지고, 열의 위치는 2에 해당하는 [3, 6]이 인덱싱된다

 

<팬시 인덱싱>

 

조건을 걸어 추출한다

<불리언 인덱싱>

 

조건을 걸어 추출하되, ndarray에있는 모든 element에 대한 T or F가 나온다.

 

7. 정렬

 

정렬의 방법은 두가지가 있다

 

np.sort(배열이름): 새로운 ndarray를 반환한다. 따라서 새로운 객체에 보통 담는다. 

배열이름.sort(): 원본 행렬을 정렬한다

사실... 당연한거다

 

<내림차순 정렬>

 

<2차원 정렬>

 

axis가 0이면 열대로, 1이면 행대로 정렬한다. 

<원본 행렬의 index>

 

정렬 후 이전 index가 필요한 상황에는 argsort를 사용한다.

sort메소드로 인해 뒤죽박죽된 index가 표기된다.

대표적인 예시인 성적 정렬이다

score_sort객체에 score를 내림차순으로 정렬하고, score_sort에는 정렬된 인덱스를 담는다. 

인덱스는 원배열에 index로 고스란히 사용할 수 있다. 

8. 내적

 

9. 역행렬