본문 바로가기
Python/python 기초

Numpy - 6

by winston1214 2020. 1. 22.
반응형

numpy - 6 까지 올 줄은 몰랐지만 지겹던 numpy의 마지막이다. 집계함수를 마지막으로 numpy 파트를 끝내겠다.

이번 시작도 물론 import numpy as np 이다.

## Numpy 배열 연산
 집계함수
    - Numpy 배열에 대해 집계 함수를 적용할 때는 반드시 axis로 설정된 기준에 따라 연산 수행
    - 별도로 값을 지정하지 않으면 기본값은 axis = None으로 지정
    - axis
        - axis=None
            - 전체 데이터를 하나의 배열로 간주하고 집계 함수의 연산 범위를 전체 배열로 지정
        - axis=0
            - 열을 기준으로 동일한 열에 있는 요소를 하나의 그룹으로 묶어 집계 함수의 연산 범위로 지정
        - axis=1
            - 행을 기준으로 동일한 행에 있는 요소를 하나의 그룹으로 묶어 집계 함수의 연산 범위로 지정

- 집계함수: 배열객체에 대한 메소드로 사용하거나 Numpy 라이브러리의 함수로 사용하는 두가지 방법
    - 합계: sum()
    - 최소값: min()
    - 최대값: max()
    - 누적합계: cumsum()
    - 평균: mean()
    - 중앙값: median()
    - 상관계수: corrcoef()
    - 표준편차: std()
    - 고유값 : unipue()

진짜 솔직히 배열객체에 대한 메소드로 더 많이 쓴다.

# 합계- 배열 요소의 전체 합계
# 배열 타입의 매서드: arr.sum()
# numpy 함수: np.sum(arr)
a.sum() #45
np.sum(a) #45

 

사용하는 방법은 다음과 같다. 어떤게 타자를 조금 덜 칠까 생각해도 굳이 numpy 라이브러리 함수로 사용하지 않아도 된다. 따라서 나머지 코드의 작성 방법은 알파벳만 바꾸면 되므로 굳이 쓰진 않겠다. 

그래도 데이터 분석에서 가장 많이 쓰는 함수를 꼽자면 unique() 함수이기 때문에 unique 함수의 예시만 보고 넘어가겠다.

a1=np.random.randint(0,4,(3,3))
a1
#out
array([[3, 3, 0],
       [2, 1, 2],
       [3, 1, 2]])
       
np.unique(a1)
#out
array([0, 1, 2, 3])

위와 같이 중복을 제거한 고유값만 반환하는 것이 unique() 값이다.

블로그를 작성하면서 한가지 의문이 들었다. 왜 굳이 numpy 라이브러리에는 sum과 같은 기본 함수가 있을까? 그냥 편하게 a.sum() 하면 되는데 굳이 라이브러리를 설치하면서 np.sum(a)를 하는지에 대한 의문을 가졌다. 그래서 나는 성능의 차이를 시험해 보기 위에 %%time 을 통해 동작 시간을 알아보았다.

먼저 실험을 위해 충분히 크게 길이가 백만인 array를 생성해보았다.

 # 0부터 1000000개 요소 
x=np.arange(1000000) 
len(x)
#1000000

그리고 실험을 하기 위해 1. for 문을 통한 배열 값 더하기. 2. 기존의 sum함수를 이용하기 3. np.sum 이용하기

이 3가지의 조건을 나눠서 작동 시간을 측정해보겠다.

%%time
# 셀의 동작 시간을 알려주는 명령어 가장 위에 있어야됨 주석 사이에 있어도 안됨
# 1s=1000ms(밀리세컨즈)= 1000,000us(마이크로 세컨즈)
# 반복문을 통한 합계
result = 0
for i in x:
    result +=i
print(result)

1783293664
Wall time: 436 ms

물론 컴퓨터의 성능에 따라 시간은 차이가 있다는 것을 염두해 두어야 한다. 반복문을 통한 덧셈은 436ms 시간이 걸렸다.

%%time
# 벡터 연산을 통한 합계 연산
np.sum(x)
#out
Wall time: 1.02 ms
1783293664

numpy 라이브러리에 있는 sum 함수를 이용했을 때에는 1.02ms 시간이 걸렸다. for문과 비교했을 때 엄청난 차이가 있다.

sum(x)
#out
Wall time: 188 ms
1783293664

기존의 sum함수를 썼을때는 for문 보다 성능이 좋지만 np.sum 보다는 성능이 현저하게 떨어지는 것을 알 수 있다.

 

★ 따라서 데이터의 크기가 매우 크고 성능을 높히고 싶다면 numpy 라이브러리에 있는 함수를 쓰는 것이 가장 바람직하다. 

 

 

자세한 코드는 github.com/winston1214/baseline_ML ->  star와 팔로우 눌러주시면 감사하겠습니다.

 

winston1214/baseline_ML

ML을 위한 기초 공부. Contribute to winston1214/baseline_ML development by creating an account on GitHub.

github.com

 

반응형

'Python > python 기초' 카테고리의 다른 글

Pandas - 2  (0) 2020.02.02
Pandas - 1  (0) 2020.01.31
Numpy - 5  (0) 2020.01.22
Numpy array - 4  (0) 2020.01.07
Numpy array - 3  (0) 2020.01.07

댓글