본문 바로가기
CS(Computer Science)/인공지능

1. 딥러닝을 위한 도구

by 동욷 2023. 3. 17.

언어 : Python

 

1) 리스트 

: 데이터들을 잘 관리하기 위해서 묶어서 관리할 수 있는 자료형 중 하나

 

리스트변수이름 = [요소1, 요소2, ... ]

 

ex)  a = [1,2,3,4,5]

       b = ['blockdmask',2,4,'blog']

       c = []

 

리스트 내부의 값의 형태는 스트링이 오든, 숫자가 오든 통일되지 않아도 된다

 

 

list() 를 이용하는 방법

 

d = list()  : 비어있는 리스트 생성

 

 

- 덧셈 연산자  +

 

a = ["BlockDMask", 333]

b = [1,2,3]

 

print(a+b)

 

=> ['BlockDMask', 333, 1, 2, 3]

 

 

- 곱셈연산자 *  : 리스트를 반복한다

 

a = [1,2,3]

 

b = a * 3

print(b)

 

=> [1,2,3,1,2,3,1,2,3]

 

c = a * 0

print(c)

 

=> []

 

- 리스트 검색/ 접근

 

리스트의 인덱스는 0부터 시작한다.

 

a = ['b', 'l', 'o', 'c', 10, 11]

 

a[0] = 'b' , a[1] = 'l' , ... a[5] = 11  a[6] = error 

인덱스는 (리스트 길이 -1)이 끝임

 

마이너스 인덱스

a[-1] : 11

a[-2] : 10

...

a[-6] : 'b'

 

 

결론 : 양수 인덱스 (0~N-1) / 음수 인덱스 (-N ~ -1)

 

 

- 리스트 슬라이싱

 

리스트[원하는 시작 index: 원하는 끝 index+1]

 

시작 index 이상 끝 index+1 미만까지 추출 == (시작index~끝index)

 

 

 

- len 함수 : 리스트의 길이를 구하는 함수

 

len(c) 

 

- del 함수 : 리스트 특정 요소 혹은 리스트 특정 범위를 삭제

 

del(c[1]) => 1 index에 해당 값이 삭제된다

del(c[1:4]) => 1부터 3까지 index에 해당 값들이 삭제된다

 

- append 메서드

 

list.append(x) : 리스트의 끝에 값 x 추가

 a.append('k')

 

 

- insert 메서드

 

list.insert(a,b) - a index 위치에 b값을 추가

c.insert(0,'k')

 

 

- remove 메서드

 

list.remove(x) - 리스트에서 특정 값 제거

c.remove(66)

 

해당 값이 여러개 있으면 -> 맨 처음 값만 지워줌

없으면 -> 에러

 

- pop 메서드

 

list.pop() - 리스트 맨 마지막 값 반환 후 삭제

a.pop()

 

- extend 메서드

 

list.extend(list2) - list에 list2를 연결

a.extend(b)

 

리스트 +와 다른점 : 리스트 +는 새로운 리스트 반환 , extend는 기존의 리스트에 추가

 

- copy 메서드

 

list.copy() - 리스트 복사

b = a.copy()

 

- reverse 메서드

 

list.reverse() - 리스트 뒤집기

a.reverse()

 

- sort 메서드

 

list.sort() - 리스트 정렬 (기본 오름차순) (자료형이 모두 같아야 정렬 가능)

 

 

- count 메서드

 

list.count(x) - 리스트 값 x 의 개수 세기

a.count('k')

 

- index 메서드

 

list.index(x) - 리스트 x 의 위치값 반환

 

해당 값이 여러개 있으면 맨 처음 x의 index 반환

없는 경우 에러

 

a.index('z')

 

- clear 메서드

 

list.clear() - 리스트의 모든 내용 삭제

 

a.clear()

 

----------------------------------------------------------------------------------------------------------------------------

 

딥러닝 예제

 

1) my_list = [10, 'hello list', 20]

    print(my_list[1])

 

=> hello list

 

2) my_list_2 = [[10,20,30] , [40,50,60] ]

    print(my_list_2[1][1])

 

=> 50

 

------------------------------------------------------------------------------------------------------------------------------

 

numpy 라이브러리

:  보통 import numpy as np 형태로 import 한다

 

: Numerical Python의 줄임말로 고성능 수치 계산, 벡터 및 행렬 연산 시 편리기능 제공

 

: 데이터 분석 사용하는 라이브러리인 pandas와 matplotlib의 기반으로 사용

 

 

np.array -> 리스트를 Array 형태로 만든다

 

Ex) data1 = [1,2,3,4,5]

      print(data1)

=> [1,2,3,4,5]

 

     arr1 = np.array(data1)

     print(arr1)

=> [1 2 3 4 5]

 

print(arr1.shape)

=> (5,)

 

print(arr1.dtype)

=> 'int 32' or 'int64'

 

Ex2) data2 = [1,2,3.5,4,5]

 

arr2 = np.array(data2)

 

print(arr2)

=> [1.  2.  3.5  4.  5. ]

 

print(arr2.dtype)

=> 'float64'

 

Ex3)

 


arr3 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr3)

print(arr3.shape)

[ [1 2 3]

  [4 5 6]

  [7 8 9] ]

 

(3,3)

 

numpy shape : 해당 array의 크기를 알 수 있다

 

numpy 자료형

- 부호가 있는 정수 int(8,16,32,64)

- 부호가 없는 정수 uint(8,16,32,54)

- 실수 float(16,32,64,128)

- 복소수 complex(64,128,256)

- 불리언 bool

- 문자열 string_

- 파이썬 오브젝트 object

- 유니코드 unicode_

 

np.zeros()

-> 인자로 받는 크기 만큼, 모든 요소가 0인 array 생성

 

Ex) np.zeros(10)

[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

 

np.zeros((3,5))

 

[ [0. 0. 0. 0. 0.]

  [0. 0. 0. 0. 0.]

  [0. 0. 0. 0. 0.] ]

 

np.ones() 

-> 인자로 받는 크기만큼, 모든 요소가 1인 array 생성

 

np.arange()

-> 인자로 받는 값만큼 1씩 증가하는 1차원 array 생성

-> 이때 하나의 인자만 입력하면 0~인자-1 까지 생성

 

Ex)

np.arange(10)

-> [0 1 2 3 4 5 6 7 8 9]

 

np.arange(3,10)

-> [3 4 5 6 7 8 9]

 

 

Array 연산

arr1 = np.array([[1,2,3],[4,5,6]])
arr2 = np.array([[10,11,12],[13,14,15]])

 

덧셈 +

 

arr1 + arr2

결과 :

[[11 13 15]
 [17 19 21]]

 

뺄셈 -

arr1 - arr2

결과 :

[[-9 -9 -9]
 [-9 -9 -9]]

 

 

 

곱셈 *

=> 행렬 곱이 아니라 각 요소별 곱셈이 진행된다

arr1 * arr2

결과 :

[[10 22 36]
 [52 70 90]]

 

 

나눗셈 /

arr1 / arr2

결과 :

[[0.1  0.18181818 0.25]
 [0.30769231 0.35714286 0.4]]

 

Array의 브로드 캐스트

-> 서로 크기가 다른 array 연산 가능

 

arr1 = np.array([[1,2,3],[4,5,6]])
arr3 = np.array([10,11,12])

 

arr1 + arr3
[[11 13 15]
 [14 16 18]]

 

arr1 * arr3
[[10 22 36]
 [40 55 72]]

arr3이 [10 11 12] 에서 [ [10 11 12] [10 11 12] ] 로 확장되어 계산

 

 

np.random.randn()

-> 기대값이 0이고, 표준편차가 1인 가우시안 정규분포를 따르는 난수를 발생시키는 함수

 

Ex) data = np.random.randn(8,4)

 

np.random.rand()

-> 0~1의 난수를 발생시키는 함수

 

Ex) data = np.random.rand(8,4)

 

 

 

Array boolean 인덱싱(마스크)

 

- 원하는 행 또는 열의 값만 뽑아낼 수 있음

 

names = np.array(['Beomwoo','Beomwoo','Kim','Joan','Lee','Beomwoo','Park','Beomwoo'])
data = np.random.randn(8,4)

names의 각 요소와 data의 각 행과 연결된다 가정

 

Ex) names가 Beomwoo인 행의 data만 보고 싶다

names_Beomwoo_mask = (names == 'Beomwoo')
data[names_Beomwoo_mask,:]
[[-1.07099572, -0.85382063, -1.42474621, -0.05992846],
       [ 1.93097843, -1.8885167 ,  1.99767454,  0.31524498],
       [ 0.88575452, -1.39205929,  0.91019739, -1.04676349],
       [ 0.45963024,  0.35662128,  0.18307525,  1.46992167]]

0행 1행 5행 7행의 모든 요소를 꺼내왔다

 

Ex2) 요소가 Kim 또는 Park인 행만 꺼내기

data[(names == 'Kim') | (names == 'Park'),:]
[[-0.22633642, -0.76385264,  0.16368804,  0.91204438],
       [-0.05673648, -1.63408607, -2.29844338, -0.3662913 ]]

 

 

data array 자체적 마스크

 

Ex) 0번째 열의 값이 0보다 작은 행을 구한다

 

data[:,0] < 0

마스크 생성

 

data[data[:,0]<0,:]
[[-1.07099572, -0.85382063, -1.42474621, -0.05992846],
       [-0.22633642, -0.76385264,  0.16368804,  0.91204438],
       [-0.05673648, -1.63408607, -2.29844338, -0.3662913 ]]

 

Ex2) 0번째 열의 값이 0보다 작은 행의 2,3번째 열 값

 

data[data[:,0]<0,2:4]
[[-1.42474621, -0.05992846],
       [ 0.16368804,  0.91204438],
       [-2.29844338, -0.3662913 ]]

 

np.abs()

-> 각 성분의 절대값 계산

 

np.sqrt() == array ** 0.5

-> 각 성분의 제곱근 계산하기

 

np.square()

-> 각 성분의 제곱 계산하기

 

np.exp()

-> 각 성분을 무리수 e의 지수로 삼은 값 계산하기

 

np.log() / np.log10() / np.log2()

-> 각 성분을 자연로그, 상용로그, 밑이 2인 로그를 씌운 값 계산하기

 

np.sign()

-> 각 성분의 부호 계산하기 (양수 : 1, 음수 : -1 , 0 : 0)

 

np.ceil()

-> 각 성분의 소수 첫번째 자리에서 올림한 값 계산하기

 

np.floor()

-> 각 성분의 소수 첫번째 자리에서 내림한 값 계산하기

 

np.isnan()

-> 각 성분이 NaN인 경우 True, 아닌 경우 False 반환

 

np.isinf()

-> 각 성분이 무한대인 경우 True, 아닌 경우 False 반환

 

np.cos() / np.cosh() / np.sin() / np.sinh() / np.tan() / np.tanh()

-> 각 성분에 대한 삼각함수 계산

 

 

np.add() / np.subtract() / np.multiply() / np.divide()

-> 두 개의 array에 대해 동일한 위치의 성분끼리 연산한 값을 계산

 

이것들과 브로드캐스팅의 차이

 

add, subtract, multiply, divide는 다차원 배열에서도 수행 가능 / 항상 배열을 반환

+ - * / 는 경우에 따라 스칼라 또는 배열을 반환

 

 

 

np.maximum() / np.minimum()

-> 두 개의 array에 대해 동일한 위치의 성분끼리 최대값, 최소값 비교하여 계산

 

 

통계함수

 np.sum()

-> 전체 성분의 합 계산

 

np.sum(arr1, axis = 1)

=> 열 간의 합을 계산

 

np.sum(arr1, axis = 0)

=> 행 간의 합을 계산

 

axis = 0 : 행 / axis = 1 : 열

 

np.mean()

=> 전체 성분의 평균 계산

 

np.std() / np.var() / np.min() / np.max()

=> 전체 성분의 표준편차, 분산, 최소값, 최대값 계산

 

np.argmin() / np.argmax()

=> 전체 성분의 최소값 , 최대값이 위치한 인덱스 반환

 

np.cumsum() / np.cumprod()

=> 맨 처음 성분부터 각 성분까지의 누적 합, 누적 곱을 계산

 

np.sort()

=> 오름차순 정렬

 

np.sort() [::-1]

=> 내림차순 정렬

 

 

 

728x90

'CS(Computer Science) > 인공지능' 카테고리의 다른 글

6. 로지스틱 회귀  (0) 2023.03.19
5. 뉴런 생성 & 시그모이드 함수  (0) 2023.03.18
4. 경사하강법  (0) 2023.03.18
3. 선형 회귀  (0) 2023.03.18
2. 딥러닝을 위한 도구  (0) 2023.03.18