hojeomi blog
Day 6-1. numpy 본문
1. 행렬과 매트릭스를 코드로 표현하기
- Numerical python
- 파이썬의 고성능 과학 계산용 패키지
- Matrix와 Vector와 같은 Array 연산의 사실상의 표준
- 일반 List에 비해 빠르고, 메모리 효율적
- 반복문 없이 데이터 배열에 대한 처리를 지원함
- 선형대수와 관련된 다양한 기능을 제공함
2. ndarray
- numpy는 np.array 함수를 활용해서 배열을 생성함 → ndarray
- numpy는 하나의 데이터 타입만 배열에 넣을 수 있음
- List와 가장 큰 차이점 → dynamic typting not supported
3. array creation
- array가 메모리 접근성이 더 좋음, array는 메모리의 크기도 일정함
- 리스트는 값이 들어있는 주소를 가리킨다 → 적혀있는 주소로 타고 들어가야 값이 있다
- array는 가리키는 주소에 바로 값이 있다
- array는 메모리가 할당됨 → array(a)와 array(b)의 원소들은 다른 메모리값을 가지고 있기 때문에 같은 값이더라도(1==1) 메모리값은 다름 → False
4. array type
- float32: 32bits = 4bytes
- float64: 64bits = 8bytes
- int: 8bits = 1byte
5. Handling shape
- reshape: array의 shape의 크기를 변경함, element의 갯수는 동일
- reshape(-1,2): -1을 입력해줌으로써 x*2=element 갯수가 되도록 x를 자동 조절
- flatten: 벡터처럼 펼쳐줌
- indexing & slicing: [i,j] 형식의 접근을 허용함, 리스트와 달리 행과 열 부분을 나눠 slicing이 가능함 → 매트릭스의 부분집합을 추출할 때 유용함
6. Creation function
- arange
- array의 범위를 지정하여 값의 list를 생성하는 명령어
- np.arange(0,5,0.5): 0에서 5까지 0.5단위로 생성
- ones, zeros, and empty
- 1, 0, 또는 빈공간으로 채워진 array 생성
- empty: shape만 주어지고 비어있는 ndarray 생성(memory intialization)이 되지 않음
- something_like
- 기존 ndarray의 shape 크기 만큼 1, 0 또는 empty array를 반환
- something에는 ones, zeros, empty가 들어감
- 예) ones_like(이미 생성되어 있던 array)
- identity
- 단위행렬을 생성함
- eye
- 대각선이 1인 행렬, k값의 시작 index의 변경이 가능
- identity(단위행렬)과 다르게 nxm의 행렬을 생성할 수 있음
- diag
- 대각 행렬의 값을 추출함
- eye처럼 k를 이용하여 시작 인덱스를 설정할 수 있음
- random sampling
- 데이터 분포에 따른 sampling으로 array를 생성
- 표준정규분포, 정규분포, 균등분포 등에 따른 랜덤값을 생성할 수 있음
- 균등분포: np.random.uniform(0,1,10).reshape(2,5) → 시작값: 0, 끝값: 1, 갯수:10개
- 모수 고려: np.random.exponential(scale=2, size=100)
7. Operation functions
- 알아야하는 개념
- axis
- 모든 operation function을 샐행할 때 기준이 되는 dimension 축
- 3x4 행렬 → (3, 4) → 3: axis=0, 4: axis=1
- axis
- sum
- 새롭게 생성된 축이 axis=0이 됨
- mean & std
- mathmetical functions
- np.exp()
- np.sqrt()
- concatenate
- numpy array를 붙이는 함수
- vstack: 행끼리 붙임 <=> np.concate((a,b), axis=0)
- hstack: 열끼리 붙임 <=> np.concate((a,b), axis=1)
- [참고] 차원 추가하는 방법: reshape, newaxis
8. array operations
- operations between arrays: numpy는 array간의 기본적인 사칙 연산을 지원함
- element-wise operations
- array간 shape이 같을 때 일어나는 연산
- 예) 3x4행렬 * 3x4행렬 → 같은 위치의 값끼리 곱하기 연산
- dot product
- transpose(or T attribute 사용)
- broadcasting
- shape이 다른 배열 간 연산을 지원하는 기능
- scalar-matrix 외에도 vector-matrix 간의 연산도 가능
- 예) 3x3행렬 * [1,2,3] → [1,2,3]을 [[1,2,3], [1,2,3], [1,2,3]]오로 broadcasting해서 연산
9. numpy performance
- 일반적으로 속도는 아래순
- for loop → list comprehension → numpy 순으로 빠름
- 1억번의 loop이 돌 때, 약 4배 이상의 성능 차이
- numpy는 C로 구현되어 있어, 성능을 확보하는 대신 파이썬의 가장 큰 특징인 dynamic typing을 포기함
- concatenate처럼 계산이 아닌 할당에서는 연산 속도의 이점이 없음
10. comparisons
- array 간의 비교
- All & Any
- logical_and, logical_not, logical_or
- np.where: True/False에 따른 반환값 조절 및 조건을 만족하는 값의 인덱스 반환
- 예) np.where(a>0, 3, 2) → a>0이면 3, 아니면 2 반환
- np.isnan: nan인지 아닌지 반환
- np.isfinite: finite한 수인지 아닌지 반환
- armax & armin
- array 내 최댓값 또는 최솟값의 인덱스 반환
- axis 기반의 반환도 가능
11. boolean & fancy index
- boolmean index
- 특정 조건에 따른 값을 배열 형태로 추출
- comparison operation 함수들도 모두 사용가능
- [참고] np.where는 만족하는 값의 '인덱스' 반환
- fancy index
- index value를 사용해서 값 추출
- matrix 형태도 가능
12. numpy data in & out
- np.loadtxt()
- np.astype(int): 정수형 변환
- np.savetxt('.\파일이름.csv', 저장할 numpy, delimiter=",")
'AI > Course' 카테고리의 다른 글
Day 6-3. 행렬 (0) | 2021.01.25 |
---|---|
Day 6-2. 벡터 (0) | 2021.01.25 |
Day 2-2. 파이썬 함수에서 call by object reference (0) | 2021.01.25 |
Day 5-1. File / Exception / Log Handling (0) | 2021.01.22 |
4-1. 파이썬 OOP(객체 지향 프로그래밍) (1) | 2021.01.22 |
Comments