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
'데이터 분석 > 자료구조(Data structure)' 카테고리의 다른 글
파이썬 - Pandas 기초 정리(DataFrame - 2) (0) | 2020.12.23 |
---|---|
파이썬 - Pandas 기초 정리(DataFrame - 1) (0) | 2020.12.22 |
파이썬 - Pandas 기초 정리(Series) (0) | 2020.12.21 |
파이썬 - Numpy 기초 정리(1) (0) | 2020.12.16 |
[자료구조] Heap(힙) (0) | 2020.08.28 |