언어 : 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)
[ [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]
=> 내림차순 정렬
'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 |