newbie.log
로그인
newbie.log
로그인
[BoostCamp AI Tech / Day 3] Numpy(1/3)
newbie
·
2021년 8월 4일
팔로우
0
0
[boostcampAI U stage] week1
목록 보기
12/21
실습 코드는 코랩으로 진행
파이턴 데이터 처리 문제점
python은 interpreter 언어로 처리 속도가 문제
list 형태 등 메모리가 비효율적(시퀀스형 자료형에 대핵 각각 메모리 주소를 가리킴)
그러므로 적절한 패키지 활용이 필수 => "NumPy"
Numerical Python - numpy
파이썬의
고성능 과학 계산용 패키지
**matrix와 Vector와 같은 Array 연산의 사실상의 표준
numpy 특징
일반 list에 비해 빠르고, 메모리 효율적
ndarray
입력된 데이터가 차례대로 메모리에 할당되어 붙어있음
해당 메모리 주소의 값이 변경되도 메모리 주소가 변경되지 않고 값 자체만 변경됨
메모리 위치 고려 X
ndarray 생성 시 data type을 결정하여(dynamic typing 불가) 메모리 크기가 일정하여 데이터 저장 공간을 확보하기에도 좋음
list
-5~256의 값이 정해진 공간에 있어서 값 자체가 그 주소값을 리스트에 차례대로 저장
따라서 그 주소를 한 번 더 타고 들어가야 값을 출력할 수 있음
기존 값이 변경되는 경우 해당 리스트의 주소를 타고 들어가서 값을 변경해야 하는 문제가 생김
반복문 없이 데이터 배열에 대한 처리를 지원
선형대수와 같은 다양한 기능 제공
C,C++,포트란 등의 언어와 통합 가능
numpy 활용
array 구조
numpy는 np.array 함수를 활용하여 배열을 생성
ndarray 객체
단, 하나의 데이터 type만 배열에 넣을 수 있음
list와 가장 큰 차이점 ->
dynamic typing 지원 안함
array rank
0 : scalar(ex, 7)
1 : vector(ex, [10,10]
2 : matrix(ex, [[10,10],[15,15]]
3 ; 3D Tensor(ex, [[[1,2,3],[2,3,4]],[[11,22,33],[22,33,44]]])
n : n차원 Tensor
array.dtype : 데이터 타입 출력
array.shape : array 구조
array.ndim : array 차원
array.reshape(c1,c2,c3) : ndarray의 구조 변경
(c1,c2,c3) 구조
(2,) 이면 (2,n//2) 구조로 구조가 변함
(-1,)로 하면(1,element 개수) 형태로 출력됨
flatten() : 다차원 array를 1차원 array로 변환 (= reshape(-1,)
numpy handing 함수
indexing
list indexing 방식 + ndarray[1,2](콤파 표기법도 제공)
ndarray[1][2] == ndarray[1,2] : 1행 2열 값
slicing
행과 열을 나눠서 가능
ndarray[2:4, 1:3] : 2~3행의 1~2열 값 출력
arange
range()와 같은 역할을 하지만 floating point도 가능
arange(0,11,2.5) => 0.0, 2.5, 5.0, 7.5, 10.0
zeros(shape = (), dtype = 데이터타입) or ones
모든 원소가 0(or 1)인 array
empty()
메모리만 주어지고 빈 array
메모리 주소가 이전에 다른 객체가 사용했을 경우 값을 반환
ones_like(array이름), zeros_like, empty_like
입력한 array와 동일한 크기지만 모든 원소의 값이 1인 array 반환
identity - 단위 행렬 생성
diag : 특정 array의 대각행렬 값만 출력
random sampling
np.random.uniform(n1,n2,n개)n1부터 n2까지 n개 출력(균등분포)
np.random.normal(0,1,10) (정규분포)
연산
axis 지정 시 해당 기준으로 연산
axis = 0: axis 1,...,n : 앞 차원부터 1 뒤로 갈수록 0
ex) (2,2) array : 0 = 행 기준, 1 = 열기준
numpy 연산
array.sum()
array.mean()
array.median()
numpy mathematical function 찾아보기
concat
np.vstack(a1,a2) 행 기준으로 붙임 : (1,3)(1,3) => (2,3)
np.concatenate(a1,a2), axis = 0)
np.hstack(a1,a2) 열 기준으로 붙임 : (1,3)(1,3) => (1,6)
np.concatenate(a1,a2), axis = 1)
곱셈 연산
array * array : element-wise operation(같은 위치의 원소끼리 연산)
a1.dot(a2) : 내적
전치(Transpose)
a1.T
브로드캐스팅
shape이 다른 배열 간 연산을 지원
작은 크기의 array가 큰 크기의 array 형태로 변환
ex) a1 = [[1,2,3],[4,5,6]], a2 = [[1],[5]]
a1+a2 => [[2,3,4],[9,10,11]]
덧셈, 뺄셈, 원소곱, 원소나눗셈, 몫, 제곱 등 다 가능
[주의사항!!!] 브로드 캐스팅이 발생하면 불균형한 데이터 형태를 맞춰줘서 간편하게 연산을 수행할 수 있지만, 잘못된 데이터에 대한 연산 수행 시 자동으로 브로드캐스팅이 발생하여, 차후에 어디서 에러가 발생한지 찾기 어려움
numpy 조건
< <= >= 등 python과 동일하게 사용 가능
all, any를 통해 조건 만족 여부 반환
np.all(a > 5), np.any(a == 5)
np.logical_and(a>0, a<3) #and 조건
a가 boolean형 ndarray일 시 : np.logical_and(a) 처럼도 가능
np.logical_not(a>0, a<3) #not 조건
np.logical_or(a>0, a<3) #or 조건
np.where(condition,True,False) : np.where(a==1,1,0)
condition 조건에 의해 True or False로 반환된 값을 변환하여 출력
np.isnan(a) # np.NaN이 있는지
np.isfinite(a) #inf가 있는지
np.argmax() # 최대 값 index 반환
np.argmin() # 최대 값 index 반환
argmax,argmin 둘 다 axis를 지정할 경우 특정 조건(행,열 등)의 최대 혹은 최소값의 index 반환
np.argsort() # 오름차순 기준으로 값의 index 순서 반환, 내림차순 np.argsort()[::-1]
boolean index
condition = tmp > 5, tmp_array[condition]
condition 조건에 맞는 값만 반환
fancy index
index 값이 포함된 array = index_array
value 값이 포함된 array = value_array
value_array[index_array] => index_array에 있는 index 순서대로 value_array의 값을 반환
index array를 행과 열로 나눠서도 가능
행 index array : row_array, 열 index array : col_array
value_array[row_array, col_array]
take. 함수, bracket index와 같은 효과
value_array.take(index_array)
numpy data I/O
np.loadtxt(filepath + 파일명.txt) #txt 파일 호출
np.savetxt(filepath + 파일명.csv, 저장할 array, delimiter = ",") #txt 파일 호출
text type의 데이터를 읽고, 저장하는 기능
newbie
DL, NLP Engineer to be....
팔로우
이전 포스트
[BoostCamp AI Tech / Day 3] Python data Handling
다음 포스트
[BoostCamp AI Tech / Day 3] AI Math 1강 - 벡터
0개의 댓글
댓글 작성
관련 채용 정보