데이터 분석/자료구조(Data structure)

파이썬 - Numpy 기초 정리(2)

Jerry Jun 2020. 12. 17. 14:21
728x90

이전 게시물에서 언급하였듯이 numpy 모듈은 연산하는데에도 장점이 많다.

연산에 대표적으로 더하기(add), 빼기(subtract), 곱하기(multiply), 나누기(divide) 가 있는데, numpy 연산은 ndarray 끼리 가능하기 때문에 일반 list 라면 np.array 를 선언해주어야 한다. 또한, 각각 차원이 같고 모양(shape)이 같은 배열끼리만 연산이 가능하다.

 

# 연산에 필요한 배열 선언
a = np.random.randint(100, size=(3,3))
b = np.random.randint(100, size=(3,3))
print(a)
print(b)
-----------------------------------------
[[62 77 37]
 [27 52 30]
 [ 8 98 27]]
[[48 74 42]
 [57 46 98]
 [25 39 13]]

 

(1) 더하기(add)

np.add(a, b)
--------------------
array([[110, 151,  79],
       [ 84,  98, 128],
       [ 33, 137,  40]])

* 누적 합계 : np.cumsum(ndarray)

 

(2) 빼기(substract)

np.subtract(a, b)
---------------------------
array([[ 14,   3,  -5],
       [-30,   6, -68],
       [-17,  59,  14]])

 

(3) 곱하기(multiply)

np.multiply(a, b)
-------------------------
array([[2976, 5698, 1554],
       [1539, 2392, 2940],
       [ 200, 3822,  351]])

 

(4) 나누기(divide)

np.divide(a, b)
--------------------
array([[1.29166667, 1.04054054, 0.88095238],
       [0.47368421, 1.13043478, 0.30612245],
       [0.32      , 2.51282051, 2.07692308]])

 

물론 함수를 쓰지 않아도 a + b | a - b | a * b | a / b 로 해도 정상적으로 실행된다.

 

 


* 통계 함수

num = np.random.rand(8, 5)
print(num)
--------------------------------
[[0.36027765 0.59737804 0.46596479 0.35705462 0.76034709]
 [0.51815497 0.52455125 0.21779653 0.45473369 0.26282732]
 [0.49289095 0.6361671  0.93216832 0.51645466 0.0087791 ]
 [0.02677037 0.84997656 0.50144984 0.76189241 0.26618457]
 [0.18253456 0.33926241 0.33960462 0.47380567 0.33785097]
 [0.8957205  0.15862704 0.08194321 0.58834583 0.81385056]
 [0.82596788 0.82111864 0.2037083  0.88089422 0.6978071 ]
 [0.77024703 0.12047836 0.17658379 0.42168976 0.18040163]]

 

(1) 평균(mean)

np.mean(num)
---------------------
0.47055654746569003

 

(2) 표준편차(std)

np.std(num)
-------------------
0.26381995770584377

 

(3) 분산(var)

np.var(num)
-----------------------
0.06960097008391318

 

(4) 중앙값(median)

np.median(num)
------------------
0.46988523386205727

* 조건 함수

num = np.random.randn(5)
print(num)
---------------------------
[ 0.43136619 -0.26288169  0.98352518  0.66467557 -1.72139392]

 

(1) any : 조건에 하나 이상 만족하면 True 반환 / 모두 조건에 안맞을 때 False

np.any(num > 0)
-------------------
True

 

(2) all : 조건에 모두 만족해야 True / 하나라도 조건에 만족하지 않는 것이 있으면 False

np.all(num > 0)
--------------------
False

 

(3) where : 조건에 맞는 인덱스 반환 또는 조건에 맞지 않는 값 변경

np.where(num > 0)
--------------------
(array([0, 2, 3]),)
np.where(num > 0, num, 100)
-----------------------------
array([  0.43136619, 100. , 0.98352518, 0.66467557, 100. ])

 


* 역행렬(np.linalg.inv)

x = np.random.randint(10, size=(3,3))
x
-----------------------------
array([[9, 3, 5],
       [9, 2, 7],
       [8, 9, 6]])
       
np.linalg.inv(x)
-----------------------------
array([[ 0.3984375, -0.2109375, -0.0859375],
       [-0.015625 , -0.109375 ,  0.140625 ],
       [-0.5078125,  0.4453125,  0.0703125]])
300x250