Numpy의 특징
Numpy의 특징
- List에 비해 빠르고, 메모리 효율적
- iteration(loop문) 없이 데이터 배열에 대한 연산(처리) 지원
- 선형대수 관련 기능 제공
Array
import numpy as np
array 생성
- np.array()
-> ndarray 객체 생성
- dynamic typing 지원 X
: array는 하나의 data type만 배열에 넣을 수 있다.
(list는 여러가지 type 하나의 배열에 넣을 수 있다.)
- dtype을 통해 생성하는 array의 data type을 지정할 수 있다.
test_array = np.array(["1", "4", 5.0, 8], float)
test_array
array _ 메모리 구조
- numpy array는 메모리에 데이터가 직접 연속적으로 저장된다.(c언어와 같은 방식)
- python list는 data가 어딘가에 따로 저장되어 있고, 그 주소값을 통해 접근한다.
- 메모리 접근성이 좋다

- (is : 두 data의 메모리 위치를 비교)
a = [1,2,3]
b = [5,3,1]
a[0] is b[2]
a = np.array(a)
b = np.array(b)
a[0] is b[2]
- 메모리 크기가 일정하기 때문에 할당에 효율적이다.

array 객체의 멤버변수
- array.dtype
- np.float64 선언 가능

array.astype(int)
: ndarray객체의 data type을 변경하는 numpy 함수
- test_array.nbytes
- 메모리 크기 반환

- array.shape
- 튜플 타입 반환 ex. (3, 3)
- 추가되는 차원이 앞에 붙는다.
1차원 : (n,)
2차원 : (m, n)
3차원 : (l, m, n)
...
- 새로운 차원이 앞에 붙고 이전 차원이 뒤로 밀린다.
- [[[], [], []], [[], [], []]]
: 가장 바깥 [ ]로 표현될 수록 앞에 표시된다.

- array.ndim
- array.size
- 전체 elements 개수 반환
- ex.(3,2,3) -> 323 = 18
- len(array)
- 첫 번째 차원의 개수 반환
- ex.(3,2,3) -> 3
test_array = np.array([1, 4, 5, "8"], float)
test_array.dtype
test_array.shape
Array의 함수
Reshape
array.reshape()
- array.reshape(m,n)
: array의 shape 크기 변경, element 갯수는 동일
- -1을 넣으면 나머지 size에 맞게 알아서 배치
test_array = np.array([[1,2,3,4], [1,2,5,8]])
test_array.reshape(8,)
test_array.reshape(-1,4)
test_array.shape
array.flatten()
- 다차원 -> 1차원

indexing, slicing
- indexing : list와 달리 [p,q] 표기법도 제공
test_array[1][2] == test_array[1,2]
- list와 달리 행(row)과 열(column)을 따로 나눠서 slicing이 가능
a = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]], int)
a[:,2:]
a[1,1:3]
a[1:3]
- [ startpoing : endpoint : step ]

newaxis
test_array = test_array[np.newaxis, :]
creation 생성
np.arange()
- list의 range()와 같이 0 ~ n-1까지 범위의 값을 가지는 ndarray 생성
- list와 달리 floating point로 step 파라미터 설정 가능

np.zeros()
- 초기값 0으로 가득찬 ndarray 생성

np.ones()
- 초기값 1로 가득찬 ndarray 생성

np.empty()
- shape만 할당되고, 비어있는 ndarray 생성
- 메모리에 이전에 사용하던 data가 있으면 그대로 반환된다.

np.someting_like()
- 기존 다른 array와 같은 shape으로 새로운 초기값 1,0,empty인 ndarray 생성
- np.zeros_like(), np.ones_like(), np.empty_like()

random sampling
- np.random.uniform(a,b,n)
- 균등분포
- a~b사이에 균등분포로 n개의 값을 생성

- np.random.normal(a,b,n)
- 정규분포

행렬 생성
- np.identity(n= , dtype= )
- 단위행렬(i) 생성

- np.eye()
- 대각선이 1인, shape이 자유로운 행렬 생성
- 1이 시작하는 index k를 변경 할 수 있다.

- np.diag(array)
- 행렬의 대각 행렬 값 추출

operation 연산
axis
-
operation function 실행할 때 기준이되는 dimension 축
array의 shape
1차원 : (n,)
2차원 : (m, n)
3차원 : (l, m, n)
...
- 새로운 차원이 앞에 붙고 이전 차원이 뒤로 밀린다.
- [[[], [], []], [[], [], []]]
: 가장 바깥 [ ]로 표현될 수록 앞에 표시된다.
-
앞 dimension부터 axis = 0, 1, 2 할당
: (axis=0, axis=1, asix=2)
-
operation연산에 axis를 지정하면 해당 축 안에서, 해당 축을 기준으로 연산
- 해당 축을 없앤다고 생각
- 해당축의 값들을 연산해서 하나로 압축 한다고 생각
- 2차원
axis = 0 )
: 한 열(column)에 있는 값들을 연산
: 열(column) 하나를 값 하나로 만듬
axis = 1 )
: 한 행(row)에 있는 값들을 연산
: 행(row) 하나를 값 하나로 만듬


array.sum() / mean() / std() / var()


mathmatical function
- array의 각각의 element에 연산을 취하여 반환
- np.sqrt(test_array)
- np.exp(test_array)

convatenate
- 두 nparray를 붙이는 함수

array간 operation
element-wise operation
- 기본 사칙연산 지원
- shape이 같을 때 일어나는 연산

dot product
- 행렬 곱 연산
- array_a.dot(array_b)

transpose
- array.transpose()
- array.T

broadcasting
- shape이 다른 array간 연산 지원
- +, -, *, /, //, **
- Matrix - Scalar
Vector - Scalar
Matrix - Vector
모두 지원

comparisons
array 조건문, np.all() / np.any()
- array의 모든 elements에 대해 각각 조건문에 대한 Boolean값을 array로 반환
- np.all(), np.any()

element-wise comparison operation
- 같은 shape의 array간 같은 위치에 있는 element끼리 비교 연산 결과 Boolean값을 array로 반환

- broadcasting도 일어난다.
np.where
- np.where(조건문)
: 조건문에 대해 True인 elements의 index만 반환
- np.where(조건문, True일 때 값, Flase일 때 값)
: True인 경우, Flase인 경우 각각 지정한 값으로 변환하여 반환

np.isnan()
: np.NaN인 경우 True를 나머지는 False를 반환

argmax, argmin
- np.argmax(array)
np.argmin(array)
- array내 최대값, 최소값의 index 반환

boolean index
- array의 indexing을 Boolean list로 넣어주면 True인 index의 값만 추출
- array 비교연산자로 조건문을 만들면 Boolean array로 반환된다.
- array[ array > x ]로 조건에 맞는 elements만 추출

fancy index
- array의 indexing을 index list로 넣어주면 해당 index에 해당하는 값들 추출한 array 반환

data i/o

