jupyter 노트북 필기 https://github.com/freenozero/Book_Python_machine_learning_perfect_guide
Numpy
-
Numerical Python을 의미하는 Numpy는 파이썬에서 선형대수 기반의 프로그램을 쉽게 만들 수 있도록 지원하는 대표적인 패키지, 빠른 배열 연산 속도를 보장, C/C++과 같은 저수준 언어 기반의 호환 API 제공한다.
-
Numpy는 매우 빠른 배열 연산을 보장해주지만, 파이썬 언어 자체가 가지는 수행 성능의 제약 때문에 매우 중요한 부분은 C/C++ 기반의 코드로 작성하고 Numpy에서 호출하는 방식으로 쉽게 통합할 수 있다.
-
Tensorflow는 이러한 방식으로 배열 연산 수행 속도를 개선하고 Numpy와도 호환될 수 있게 작성됐다.
넘파이의 기본 데이터 타입은 ndarray이다. ndarray를 이용해 넘파이에서 다차원 배열을 쉽게 생성, 연산을 수행할 수 있다.
Numpy ndarray 개요

- array() 함수: 다양한 인자를 입력받아서 ndarray로 변환하는 기능을 수행한다.
- shape 변수: ndarray의 크기, 행(가로/ row/ horizontal)과 열(세로/ column/ vertical)의 수를 튜플 형태로 가지고 있다. 이를 통해 ndarray 배열의 차원을 알 수 있다.
- ndim 변수: ndarray의 차원을 확인할 수 있다. 리스트를 주로 ndarray로 변경하는데 리스트 []는 1차원, 리스트 [[]]는 2차원과 같은 형태로 배열의 차원과 크기를 쉽게 표현할 수 있기 때문이다.
배열과 리스트의 차이점
간단한 정리: https://bb-dochi.tistory.com/9
심화된 정리: https://ongveloper.tistory.com/403
결론
배열을 사용!
1. 저장할 데이터수 정해져 있음
2. 삽입, 삭제 작업이 적음
3. 특정 위치의 데이터를 조회하는 작업이 많음
리스트를 사용!
1. 저장할 데이터수가 미정
2. 삽입, 삭제 작업이 많음
3. 특정 위치의 데이터를 조회하는 작업이 적음
ndarray의 데이터 타입
ndarray의 데이터 값은 숫자, 문자열, 불 등 모두 가능하다. 숫자형의 경우 int, unsigned int, float형도 가능하고 complex 타입도 제공한다. 그러나 같은 데이터 타입만 한 개의 ndarray 객체에 있을 수 있다.

- list1: integer 숫자인 1, 2, 3을 값으로 가지고 있고 ndarray로 쉽게 변환이 가능하다. ndarray 내의 데이터 값은 모두 int32형이다.
- list2, list3: 데이터 유형이 섞여있으면 데이터 타입이 더 큰 데이터 타입으로 변환된다.

ndarray를 편리하게 생성하기 - arange, zeros, ones

- arange() 함수: 반열린구간 [start, stop)에서 step의 크기 만큼 일정하게 떨어져 있는 숫자들을 array 형태로 반환하며 stop 매개변수는 반드시 전달한다. start(default:1)와 step(default:0)은 전달하지 않아도 된다.

- zeros() 함수: 튜플 형태의 shape 값을 입력하면 모든 값을 0으로 채운 해당 shape를 가진 ndarray를 반환
- ones() 함수: 1로 채운다.
함수 인자를 정해주지 않으면 default로 float64 형의 데이터로 ndarray를 채운다.
ndarray의 차원과 크기를 변경하는 reshape()

- reshape() 메서드: ndarray를 특정 차원 및 크기로 변환한다., 함수 인자로 (row, column)을 부여한다.

- -1을 인자로 사용하면 원래 ndarray와 호환되는 새로운 shape로 변환해준다.

- tolist() 메서드: ndarray를 리스트 자료형으로 변환
넘파이의 ndarray의 데이터 세트 선택하기 - 인덱싱(Indexing)
1. 특정한 데이터만 추출
원하는 위치의 인덱스 값을 지정하면 해당 위치의 데이터 반환
2. 슬라이싱(Slicing)
연속된 인덱스상의 ndarray를 추출하는 방식
3. 팬시 인덱싱(Fancy Indexing)
일정한 인덱싱 집합을 리스트 or ndarray 형태로 지정해 해당 위치에 있는 데이터의 ndarray를 반환
4. 불린 인덱싱(Boolean Indexing)
특정 조건에 해당하는지 여부인 True/False 값 인덱싱 집합을 기반으로 True에 해당하는 인덱싱 위치 데이터의 ndarray를 반환
단일 값 추출
1차원

다차원

슬라이싱
1차원
':' 기호를 이용해서 연속한 데이터를 슬라이싱해서 추출할 수 있다.

- ':' 기호 앞에 시작 인덱스를 생략하면 자동으로 처음 인덱스인 0으로 간주
- ':' 기호 뒤에 종료 인덱스를 생략하면 자동으로 맨 마지막 인덱스로 간주
- ':' 기호 앞/뒤에 시작/종료 인덱스를 생략하면 자동으로 맨 처음/맨 마지막 인덱스로 간주
다차원

팬시 인덱싱

불린 인덱싱

행렬의 정렬 - sort()와 argsort()
행렬 정렬
1차원

- np.sort(): 원 행렬을 그대로 유지한 채, 원 행렬의 정렬된 행렬을 반환
- ndarray.sort(): 원 행렬 자체를 정렬한 형태로 반환, 반환 값은 None
다차원

정렬된 행렬의 인덱스 반환

- np.argsort(): 정렬 행렬의 원본 행렬 인덱스를 ndarray 형으로 반환

위와 같이 데이터 추출할 때 많이 사용된다.
선형대수 연산 - 행렬 내적과 전치 행렬 구하기
행렬 내적(행렬 곱)

전치 행렬

- np.transpose(): Numpy 전치 행렬
- .T: 전치 행렬