일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- docker
- 뚝섬유원지
- 10km
- 유산소
- 하체
- Kubernetes
- GitHub
- 중식
- Python
- 대구
- 대전
- DSEC
- 달리기
- Podman
- 오답노트
- Linux
- 러닝
- 한강
- 2021
- 맛집
- Shell
- 자전거
- 성수대교
- Grafana
- 건대입구역
- 소모임
- Run The Bridge
- 힐링
- 정보처리기사
- zabbix
- Today
- Total
Run The Bridge
Chapter2 파이썬 기초 본문
파이썬으로 벡터나 행렬을 나타내기 위한 Numpy(넘파이)
다음과 같이 사용할 수 있다.
1 2 3 4 | import numpy as np x = np.array([1, 2, 3]) y = np.array([4, 5, 6]) print(x + y) | cs |
결과: [5 7 9]
연속된 정수 벡터의 생성
1 2 | print(np.arange(10)) print(list(range(10))) | cs |
결과:
[0 1 2 3 4 5 6 7 8 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
np형식으로 출력하면 요소간 ','가 사라진다. + print()로 출력할 시 숫자만 출력된다
arange(n1, n2)를 사용할 시 n1부터 n2-1까지의 배열이 생성된다.
1 | print(np.arange(5,10)) | cs |
결과: [5 6 7 8 9]
ndarray형의 주의점
b = a.copy()를 사용 해야한다.
1 2 3 4 5 6 7 | a = np.array([1,1]) b = a print('a=' + str(a)) print('b=' + str(b)) b[0] = 100 print('b=' + str(b)) print('a=' + str(a)) | cs |
결과:
a=[1 1]
b=[1 1]
b=[100 1]
a=[100 1]
b의 내용을 바꾸었지만 그 변경사항이 a에도 적용이 된다.
a.copy()를 사용해주면
a=[1 1] b=[1 1] b=[100 1] a=[1 1]
와 같이 결과값이 나온다.
ndarray의 2차원 배열로 행렬 정의
1 2 | x = np.array([[1, 2, 3], [4, 5, 6]]) print(x) | cs |
결과:
[[1 2 3]
[4 5 6]]
ndarray변수명.shape로 행렬의 크기 출력
1 2 | x = np.array([[1, 2, 3], [4, 5, 6]]) print(x.shape) | cs |
결과: (2, 3) // 2행 3열
(2, 3)은 type이 tuple형으로 인덱싱할 수 있다. # print(type(x.shape))
1 2 | a = x.shape[0] b = x.shape[1] | cs |
결과: (2, 3)
다음과 같은 코드를 실행하면 값은 무엇일까요?
1 2 | x = np.array([[1, 2, 3], [4, 5, 6]]) x[1, 2] | cs |
[1, 2, 3]
[4, 5, 6]
A. 6 # index는 항상 0부터 시작합니다.
요소가 0 또는 1인 ndarray 생성, np.(zeros, ones)(size)
1 | print(np.zeros(10)) | cs |
결과: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
1 | print(np.zeros((2, 10))) | cs |
결과:
[
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0.0.0.0.0.0.0.0.0.0.]
]
모든요소가 1인 요소를 생성하려면 np.ones(size)를 사용하면 됩니다.
1 | print(np.ones(10)) | cs |
결과: [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
요소가 랜덤인 행렬 생성, np.random.rand(size)
1 | np.random.rand(2, 3) | cs |
결과: array([[0.53071759, 0.8367728 , 0.05104617],
[0.61395309, 0.12591664, 0.14067503]])
평균0 분산 1의 가우스 분포로 난수를 생성할 수 있다.
1 | np.random.randn(2, 3) | cs |
행렬의 크기 변경, 변수명.reshape(n, m)
1 2 3 | a = np.arange(10) print(a) a.reshape(2, 5) | cs |
결과: [0 1 2 3 4 5 6 7 8 9]
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
5개씩 2등분 되었다.
행렬의 사칙 연산
1 2 3 | x = np.array([[4, 4, 4], [8, 8, 8]]) y = np.array([[1, 1, 1], [2, 2, 2]]) print(x + y) | cs |
결과: [[ 5 5 5]
[10 10 10]]
스칼라 x 행렬
스칼라를 행렬에 곱하면 모든 요소에 적용된다.
1 2 | x = np.array([[4, 4, 4], [8, 8, 8]]) print(10 * x) | cs |
결과: [[40 40 40]
[80 80 80]]
numpy에 존재하는 다양한 수학 함수
np.sqrt(x) - 제곱근
np.log(x) - 로그
np.round(x, 유효자릿수) - 반올림
np.mean(x) - 하나의 값을 반환
np.st-d(x) - 표준편차
np.max(x) - 최댓값
np.min(x) - 최솟값
등의 함수가 존재한다.
행렬 곱의 계산
1 2 3 | v = np.array([[1, 2, 3], [4, 5, 6]]) w = np.array([[1, 1], [2, 2], [3, 3]]) print(v.dot(w)) | cs |
결과: [[14 14]
[32 32]] # 계산법을 모르겠네
슬라이싱
흔히 list에서 사용하는 [n:m]을 사용한다.
1 2 3 | x = np.arange(10) print(x) print(x[:5]) | cs |
[0 1 2 3 4 5 6 7 8 9] [0 1 2 3 4] 와 같은 결과가 나온다.
인수와 반환값
1 2 3 4 | def my_func2(D): m = np.mean(D) s= np.std(D) return m, s | cs |
np.mean(D) = D의 평균
np.std(D) = D의 표준편차
여러 반환값을 받기 위해
data_mean, data_std = my_func2(data)와 같이 ','로 구분해 기술한다.ㅡ
1 2 3 | data = np.random.randn(100) # 가우스분포로 랜덤난수를 생성한다. data_mean, data_std = my_func2(data) # 여러 반환값을 받기 위해 구분 print('mean:{0:3.2f}, std:{1:3.2f}'. format(data_mean, data_std)) # 출력 | cs |
결과값은 실행할 때 마다 다르게 나온다.
mean:0.18, std:0.91
mean:-0.05, std:1.13
mean:-0.01, std:0.92
파일저장(p72)
'Python > 머신러닝 그리고 AI' 카테고리의 다른 글
DALL-E 체험기 (4) | 2022.08.01 |
---|---|
Chapter5 지도학습: 회귀 (0) | 2020.08.05 |
Chapter 4 머신러닝에 필요한 수학의 기본 (0) | 2020.07.22 |
Chapter3 그래프그리기 (0) | 2020.07.21 |