Run The Bridge

Chapter2 파이썬 기초 본문

Python/머신러닝 그리고 AI

Chapter2 파이썬 기초

anfrhrl5555 2020. 7. 21. 15:55
728x90
반응형

파이썬으로 벡터나 행렬을 나타내기 위한 Numpy(넘파이)


다음과 같이 사용할 수 있다.


1
2
3
4
import numpy as np
= np.array([123])
= np.array([456])
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
= np.array([1,1])
= 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
= np.array([[123], [456]])
print(x)
cs

결과:

[[1 2 3]
 [4 5 6]]



ndarray변수명.shape로 행렬의 크기 출력


1
2
= np.array([[123], [456]])
print(x.shape)
cs

결과: (2, 3) // 2행 3열


(2, 3)은 type이 tuple형으로 인덱싱할 수 있다.  # print(type(x.shape))


1
2
= x.shape[0]
= x.shape[1]
cs
결과: (2, 3)



다음과 같은 코드를 실행하면 값은 무엇일까요?

1
2
= np.array([[123], [456]])
x[12]
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((210)))
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(23)
cs

결과: array([[0.53071759, 0.8367728 , 0.05104617],

       [0.61395309, 0.12591664, 0.14067503]])


평균0 분산 1의 가우스 분포로 난수를 생성할 수 있다.

1
np.random.randn(23)
cs



행렬의 크기 변경, 변수명.reshape(n, m)

1
2
3
= np.arange(10)
print(a)
a.reshape(25)
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
= np.array([[444], [888]])
= np.array([[111], [222]])
print(x + y)
cs

결과: [[ 5 5 5]

 [10 10 10]]


스칼라 x 행렬

스칼라를 행렬에 곱하면 모든 요소에 적용된다.

1
2
= np.array([[444], [888]])
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
= np.array([[123], [456]])
= np.array([[11], [22], [33]])
print(v.dot(w))
cs

결과: [[14 14]

[32 32]] # 계산법을 모르겠네



슬라이싱

흔히 list에서 사용하는 [n:m]을 사용한다.

1
2
3
= 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)

728x90
반응형

'Python > 머신러닝 그리고 AI' 카테고리의 다른 글

DALL-E 체험기  (4) 2022.08.01
Chapter5 지도학습: 회귀  (0) 2020.08.05
Chapter 4 머신러닝에 필요한 수학의 기본  (0) 2020.07.22
Chapter3 그래프그리기  (0) 2020.07.21
Comments