티스토리 뷰

반응형

수학, 통계 메서드

  

Numpy의 수학, 통계 메서드는 모두 axis(축) 지정이 가능합니다.


# .sum : 합

np.sum?

np.sum(

    ['a', 'axis=None', 'dtype=None', 'out=None', 'keepdims=<no value>', 'initial=<no value>'],

# axis = 축 지정, dtype = 데이터 타입, keepdims = 차원 유지 여부

arr = np.arange(10).reshape(2,5)

array([[0, 1, 2, 3, 4],

       [5, 6, 7, 8, 9]])

arr.sum()

45     # 모든 원소의 합

arr3.sum(axis=0) 

array([ 5,  7,  9, 11, 13])     # 서로 다른 행별(세로) 합

arr.sum(axis=1, keepdims = True)

array([[10],      # 서로 다른 열별(가로) 합, 차원의 축소 방지

       [35]])    


  

  

# .mean : 평균

np.mean?

np.mean(a, axis=None, dtype=None, out=None, keepdims=<no value>)

arr = np.arange(10).reshape(2,5)

array([[0, 1, 2, 3, 4],

       [5, 6, 7, 8, 9]])

arr.mean()

4.5

arr.mean(axis=0)

array([2.5, 3.5, 4.5, 5.5, 6.5])   

arr.mean(axis=1, keepdims = True)

array([[2.],

       [7.]])



# .std : 표준편차

np.std?

np.std(a, axis=None, dtype=None, out=None, ddof=0, keepdims=<no value>)

arr = np.array([1,3,5,7,9])

array([1, 3, 5, 7, 9])

math.sqrt(((arr - arr.mean())**2).sum()/5)

2.8284271247461903

arr.std()

2.8284271247461903




# .var : 분산

np.var?

np.var(a, axis=None, dtype=None, out=None, ddof=0, keepdims=<no value>)

arr = np.array([1,3,5,7,9])

array([1, 3, 5, 7, 9])

((arr - arr.mean())**2).sum()/5

8.0

np.var(arr)  ==  arr.var()

8.0



참고. Series 구조 적용 시,

numpy에서 제공하는 분산 메서드(np.var)와 Pandas에서 제공하는 분산 메서드(data.var)는 서로 다른 분산을 갖음


data.var?

data.var(axis=None, skipna=None, level=None, ddof=1, numeric_only=None, **kwargs)

s1 = Series([1,3,5,7,9])

0    1

1    3

2    5

3    7

4    9

dtype: int64

np.var(s1)

8.0

s1.var()     # Pandas는 추정된 모수인 자유도(df=1)를 포함

10.0

((arr - arr.mean())**2).sum()/(5-1)

10.0




# .min, .max : 최소, 최대값

np.min?

np.min(a, axis=None, out=None, keepdims=<no value>, initial=<no value>)

arr = np.array([1,3,5,7,9])

arr.min()

1


np.max?

np.max(a, axis=None, out=None, keepdims=<no value>, initial=<no value>)

arr = np.array([1,3,5,7,9])

arr.min()

9


 


# .cumsum, .cumprod : 원소의 누적 합, 곱

arr.cumsum?

a.cumsum(axis=None, dtype=None, out=None)

arr = np.array([1,3,5,7,9])

arr.cumsum()

array([ 1,  4,  9, 16, 25], dtype=int32)


arr.cumprod?

a.cumprod(axis=None, dtype=None, out=None)

arr = np.array([1,3,5,7,9])

arr.cumprod()

array([  1,   3,  15, 105, 945], dtype=int32)


 

 

# .argmin(), .argmax() : 최소, 최대값을 갖는 원소의 위치

arr.argmin()

3

arr.argmax()

2




# Boolean 메서드

.sum() : True의 개수

arr = np.array([1,3,5,7,9,11,13,15])

arr >= 10

array([False, False, False, False, False,  True,  True,  True])

(arr >= 10).sum()

3



.any() : True가 하나라도 있는지 검사

arr = np.array([1,3,5,7,9,11,13,15])

arr >= 10

array([False, False, False, False, False,  True,  True,  True])

(arr >= 10).any()

True



.all() : 모든 원소가 True인지 검사

arr = np.array([1,3,5,7,9,11,13,15])

arr >= 10

array([False, False, False, False, False,  True,  True,  True])

(arr >= 10).all()

False


 



#. Q

arr4 = np.arange(1,13).reshape(4,3)

arr4

array([[ 1,  2,  3],

       [ 4,  5,  6],

       [ 7,  8,  9],

       [10, 11, 12]])

# 1) 행별 평균

arr4.mean(axis = 0)

array([5.5, 6.5, 7.5])

# 2) 컬럼별 평균

arr4.mean(axis = 1)

array([ 2.,  5.,  8., 11.])

# 3) 행별 분산

arr4 - arr4.mean(axis = 0)  편차

array([[-4.5, -4.5, -4.5],

       [-1.5, -1.5, -1.5],

       [ 1.5,  1.5,  1.5],

       [ 4.5,  4.5,  4.5]])

((arr4 - arr4.mean(axis = 0))**2).mean(axis = 0)

array([11.25, 11.25, 11.25])

arr4.var(0)

array([11.25, 11.25, 11.25])

# 4) 컬럼별 분산

((arr4 - arr4.mean(axis = 1, keepdims = True))**2).mean(axis = 1, keepdims = True)

array([[0.66666667],

       [0.66666667],

       [0.66666667],

       [0.66666667]])

arr4.var(1)

array([0.66666667, 0.66666667, 0.66666667, 0.66666667])






반응형

'Python > Process' 카테고리의 다른 글

[Python] Pandas - Series  (0) 2019.02.07
[Python] NA, NaN, Null  (1) 2019.02.07
[Python] Numpy 배열(메서드, 함수)  (0) 2019.02.01
[Python] Numpy 배열(생성, 색인, 연산 ..)  (0) 2019.02.01
[Python] 모듈(Module), 패키지(package)  (0) 2019.01.29
댓글
최근에 올라온 글
최근에 달린 댓글
링크
Total
Today
Yesterday