STUDY_SEONMIN

DAY8 - numpy basic 본문

EDUCATION/DSS Online 6기

DAY8 - numpy basic

Kululu_ 2021. 1. 18. 20:16

 

numpy

- 행렬 데이터의 생성, 수정, 계산등을 빠르게 처리해주는 패키지

- 일반적으로 데이터분석 시 활용되는 데이터는 행렬로 표현이 되므로 numpy 패키지를 이용하면 빠르게 연산을 할 수 있습니다.

 

아나콘다에서는 따로 설치할 필요없이 바로 import numpy 를 통해 패키지를 불러와 사용할 수 있습니다.

패키지에 있는 함수들을 사용할 때마다 numpy.함수와 같이 사용하면 불편하므로 보통 np라고 불러와서 사용합니다.

 

1) ndarray 데이터 생성

np.array() 를 이용해 ndarray 타입 데이터를 생성할 수 있습니다.

주의할 점은 ndarray 타입은 그 안에 같은 유형의 데이터 타입만 가질 수 있다는 것입니다.

 

여러 데이터 타입 하나의 데이터 타입으로 통일되는 것을 확인할 수 있습니다.

 

 

2) 행렬 데이터 생성

- [[]] 를 이용해서 행렬 데이터를 만들 수 있습니다.

이렇게 만들어진 행렬은 2차원 데이터입니다.

 

3) 특정 데이터 선택하기( offset index, masking )

- 리스트, 튜플 데이터와 마찬가지로 ndarray 타입도 그 안에서 원하는 원소만 추출할 수 있습니다.

- 차원이 여러 개일 때는 masking( [ ] ) 을 여러 번 사용해주면 됩니다.

 

array2 에서 2라는 원소만 추출해보겠습니다.

 

우선 이렇게 코드를 실행하면 [1, 2, 3]이 추출됩니다. 이는 가장 바깥쪽 차원을 기준으로 했을 때 index 0에 해당하는 데이터입니다.

이 데이터에서 index  1에 해당하는 데이터를 추출하면 원하는 데이터 2를 추출할 수 있습니다.

array2가 ndarray 타입이긴 하지만 큰 리스트 안에 2개의 리스트가 있는 형태라고 생각하면 추출 과정의 이해가 쉽습니다.

 

또 다른 방법으로는 [ , ] 를 이용할 수 있습니다. 이 때 앞에서부터 가장 바깥쪽 차원을 의미합니다.

 

4)  ndarray 데이터 수정하기

- 원하는 데이터만 골라서 수정할 수 있습니다.

- 수정을 희망하는 객체와 새롭게 할당할 데이터의 범주가 일치하지 않으면 브로드 캐스팅됩니다.

*브로드 캐스팅 : 더 작은 범주의 객체를 확장해서 연산

 

array2에서 6이라고 하는 데이터를 10으로 바꿔 보겠습니다.

 

이번에는 [ 1, 2, 3 ] 이라고 하는 데이터를 통으로 [ 7, 8, 9 ] 라고 하는 데이터로 바꿔보겠습니다.

변경하고 싶은 데이터를 선택해서 새롭게 할당해주면 변경되는 것을 알 수 있습니다.

 

단, 이 때 주의할 점은 변경하고자 하는 데이터와 새롭게 할당하는 데이터의 모양이 일치해야 한다는 것입니다.

array2의 [ 7, 8, 9 ] 를 [ 1, 2 ] 와 같이 변경하고자 하면 에러가 발생합니다.

 

하지만 모양이 일치하지 않더라도 브로드 캐스팅이 가능한 연산은 브로드 캐스팅이 됩니다.

 

브로드 캐스팅이 가능한지를 판단하는 기준

1) 새롭게 할당하는 데이터의 범주가 바꾸고자 하는 데이터의 범주 안에 들어가는가?

* 스칼라 < 벡터, 벡터 < 행렬

2) 새롭게 할당하는 데이터를 확장했을 때 바꾸고자 하는 데이터와 모양을 일치시킬 수 있는가?

 

1)부터 확인해보겠습니다.

 

우선 새롭게 array2 를 np.array([[1, 2, 3], [4, 5, 6]])으로 만들어 진행하겠습니다.

array2[0]의 데이터는 [1, 2, 3] 벡터입니다.

벡터에 1이라는 스칼라 값을 할당하게 되면 1) 조건을 만족하게 됩니다.

2)를 고려하였을 때는 스칼라를 확장시켜서 [1, 1, 1] 이라는 벡터로 만들 수 있습니다. 

 

따라서 최종적으로 브로드캐스팅이 되어 = 연산이 진행되게 됩니다.

 

행렬 데이터에 벡터 데이터를 할당하면 어떻게 될까요?

array2[:]는 행렬입니다.

여기에 [1, 2, 3]이라는 벡터를 할당해주면 

1) 조건을 만족합니다. 

2)를 고려하였을 때 [1,2,3]이라는 벡터를 확장시켜서 [[1,2,3],[1,2,3]] 이라고 하는 기존의 array2와 모양이 일치하는 행렬을 만들 수 있습니다.

 

따라서 브로드 캐스팅 되어 = 연산이 진행되게 됩니다.

'EDUCATION > DSS Online 6기' 카테고리의 다른 글

DAY8 - 프리미어리그 데이터 분석  (0) 2021.01.19
DAY8 - 분산, 공분산, 상관계수  (0) 2021.01.18
DAY7 - 예외처리  (0) 2021.01.18
DAY7 - Module, Package  (0) 2021.01.16
DAY6 - Special method  (0) 2021.01.16
Comments