Stack Building

numpy 라이브러리 본문

Python

numpy 라이브러리

S00ahKim 2019. 7. 15. 17:44

이 글은 TeamLab의 강좌를 정리한 것입니다.

 

Numerical Python

- 고성능 과학 계산 패키지

- 행렬, 벡터 등의 배열 연산의 표준

- 리스트 연산에 비해 훨씬 빠르고 효율적인 메모리 사용

- 반복문(for/while)이 없어도 데이터 배열에 대한 처리를 지원

 

ndarray

- numpy dimensional array

- np.array([배열 생성])(데이터 타입)

- 하나의 데이터 타입만 배열에 넣을 수 있다는 점에서 리스트와 구분됨. 그래서 더 빠름.

- 값 자체를 정해진 공간 안에 데이터로 가지고 있다. 리스트는 주소reference를 가지고 있다.

- 모양을 살펴볼 때에는 .shape을 사용 (보통 2차원, 이미지를 다룰 땐 3차원)

- 차원의 수는 .ndim, 안에 있는 데이터의 총 개수는 .size를 사용해서 알아본다.

 

reshape

- 배열의 사이즈만 같다면 다차원으로 변형 가능

- 예: size가 8일 때, .reshape(2,2,2) 또는 .reshape(2,4) 등으로 가능

- 앞의 수가 상관없을 때에는 인자로 -1을 넣는다.

- 크기가 맞지 않을 때에는 ValueError 발생

 

flatten

- 다차원 배열을 1차원 배열로 변환

- 예: (2,2,4) 배열을 .flatten() 하면 (16,) 이 된다.

 

indexing과 slicing

- 리스트에서 이차원 배열은 [0][0]으로 인덱싱했지만, 넘파이에서는 [0,0]으로 가능

- 리스트와 달리 arr[:, 2:]과 같이 행, 열 부분을 나눠 슬라이싱할 수 있음

 

배열을 만드는 함수

- .arange(k) 는 0부터 k-1까지의 정수를 넣은 배열을 생성한다. 이후 reshape도 가능

- .tolist() 로 리스트로 만들 수 있다.

- .zeros()는 0, .ones()는 1로 가득한 ndarray를 생성할 수 있다. .empty()는 메모리를 할당하지 않은 요소들이 들어 있는 ndarray를 생성한다. 인자로는 shape, dtype 등을 줄 수 있다.

- .identity(k) k*k 단위행렬을 생성한다.

- .eye(n, m) n*m 대각선이 1인 행렬을 생성한다. 인자를 하나만 넣으면 n*n 행렬.

- .diag(행렬) 대각행렬의 값을 추출

- .random.uniform(시작, 끝, 개수) 균등분포 내의 값

- .random.normal(시작, 끝, 개수) 정규분포 내의 값

 

배열 내부 연산 함수

- 배열.sum(데이터형) 배열 안의 요소의 총합

- 배열.sum(axis=k) axis란 연산 실행 시 기준이 되는 차원의 축이다. 즉 shape의 요소를 axis라고 본다. (5,3)이면 axis 0은 5, axis 1은 3. axis를 주면 해당 axis를 기준으로 연산을 수행한다. 이차원 배열일 경우 k가 0이면 칼럼을 기준으로, 1이면 로우를 기준으로 연산하는 것.

- .mean() 평균 .std() 표준편차

- 이 외에도 sqrt, exp 등의 다양한 연산자 제공

 

concatenate

- .vstack((배열, 배열)) 두 배열이 위아래vertical로 합쳐진다.

- .hstack((배열, 배열)) 두 배열이 옆horizontal으로 합쳐진다.

- .concatenate((배열, 배열)), axis=k) 두 배열이 합쳐지는 기준(k)에 따라 합쳐진다. 차원이 맞지 않으면 .T 등과 같이 적절히 변형해야 한다.

 

배열 간의 연산 함수

- element-wise operations: 배열간 shape이 같을 때. 같은 위치의 요소끼리 연산.

- dot product: 배열.dot(배열) 과 같은 방식으로 행렬 기본 연산(곱) 가능.

- .tanspose() 또는 .T 로 transpose를 할 수 있다. n*m => m*n

- broadcasting: shape이 다른 배열 간 연산을 자동으로 지원. 스칼라 값 하나와 연산할 때 스칼라를 배열 요소 각각에 퍼뜨려 준다. 스칼라와 벡터 연산 외에도 어느 정도 shape이 맞는 벡터와 행렬간 연산도 지원한다. 연산이 되는 경우는 많지만 직관적으로 이해 가능한 방식을 추천.

- 배열 < 0 으로 하면 조건이 맞는지 틀린지를 요소별로 T/F로 리턴.

- 배열 < 배열 으로 하면 같은 위치에 있는 요소끼리 비교해서 조건 합불 여부를 T/F로 리턴.

- .logical_and(조건) 두 조건을 모두 만족하는가

- .logical_not(배열) 배열 안의 True는 False, False는 True로 변환

- .logical_or(배열, 배열) 같은 위치의 요소끼리 비교해서 둘 중 하나라도 True면 True

- .where(조건, 참일경우, 거짓일경우) 조건에 해당하는 부분에 참일경우, 해당 안 하면 거짓일경우를 넣는다. 조건만 넣으면 조건에 부합하는 인덱스를 리턴

- .argmax(배열) 배열 내의 최대값 인덱스 반환

- .argmin(배열) 배열 내의 최소값 인덱스 반환

- .argmax(배열, axis=k) k를 기준으로 연산 수행 가능

 

boolean index

- 넘파이의 배열을 특정 조건에 따른 값을 배열 형태로 추출할 수 있다

- 예: 배열[조건] 의 결과값은 조건이 참인 요소들만 포함한 배열

 

fancy index

- 배열 안 요소를 인덱스로 사용할 수 있다

- 배열[배열]

- 배열.take(배열)

- 행렬[행,렬] 도 가능하다.

 

loadtxt와 savetxt

- .loadtxt('파일경로') 파일을 호출한다

- .savetxt('파일명', 데이터, delimiter=',') csv로 저장 가능하다

- 참고: .astype()으로 형변환할 수 있다

 

numpy object 'pickle'로 저장하고 불러오기

- 넘파이 객체 피클은 바이너리 파일 형태로 저장된다.

'Python' 카테고리의 다른 글

[스크랩] 크롤링  (0) 2019.08.23
pandas 라이브러리  (0) 2019.07.16
lambda, map, filter, reduce  (0) 2019.07.13
collections 모듈  (0) 2019.07.13
heapq 모듈  (0) 2019.07.10
Comments