본문 바로가기
Python/python 기초

Numpy - 5

by winston1214 2020. 1. 22.
반응형

import numpy as np 는 기본으로 하고 시작하자.

## 산술연산
- 더하기: +,add()
- 빼기: -, subtract()
- 나누기: /, divide()
- 곱하기" *, multiply()
- 지수곱 표현: exp()
- 제곱근: sqrt()
- 로그: log()
- 내적(행렬곱): dot()

# 아이템: 1이상 10 미만의 1씩 증가 
# 구조: 3*3
a=np.arange(1,10).reshape(3,3)

# 아이템:1
# 구조 : 3*4
b=np.ones((3,3))

# 아이템: 10 이상 22미만의 1씩 증가하는 숫자
# 구조 3*4
c=np.arange(10,22).reshape(3,4)

먼저 계산을 할 a,b,c 행렬을 생성한다.

a+b
#out 
	array([[ 2.,  3.,  4.],
       	[ 5.,  6.,  7.],
       	[ 8.,  9., 10.]])
        
np.add(a,b)
#out
	array([[ 2.,  3.,  4.],
       	[ 5.,  6.,  7.],
       	[ 8.,  9., 10.]])

기존에 알고있던 더하기와 np.add() 함수와는 작동원리가 똑같다. 또한 행렬 구조가 (3,3)으로 되어 있으므로 각각 자리에 있는 값과 더하기가 수행이 된다. 그러나 만약 행렬구조가 다른 경우 더하기를 수행하려는 경우

np.add(a,c)

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-12-852c758c3267> in <module>
----> 1 np.add(a,c)

ValueError: operands could not be broadcast together with shapes (3,3) (3,4) 

다음과 같은 에러가 뜬다. 연산수행은 구조가 동일해야지 연산이 된다는 점을 꼭 명심해야된다.

np.subtract(a,b)
#out
array([[0., 1., 2.],
       [3., 4., 5.],
       [6., 7., 8.]])
np.divide(a,b)
#out
array([[1., 2., 3.],
       [4., 5., 6.],
       [7., 8., 9.]])
b2=np.arange(10,19).reshape(3,3)
np.multiply(a,b2)
#out
array([[ 10,  22,  36],
       [ 52,  70,  90],
       [112, 136, 162]])
np.dot(a,b2)
#out
array([[ 84,  90,  96],
       [201, 216, 231],
       [318, 342, 366]])

이 때 np.multiply(a,b2) 와 np.dot(a,b2) 의 값이 다른 점을 알 수 있을 것이다. multiply function은 기존의 연산함수의 수행방식과 같이 각 자리의 값과 곱셈을 수행하는 것이고 , dot function은 행렬곱을 수행하는 것이다. 

 

### 지수곱
- np.exp()
- 지수(exponent): 부동 소수점으로 숫자를 표시할 때 거듭제곱을 하용하여 표현

컴퓨터를 잘 모르는 사람이면 R을 사용할 때든 python을 사용할 때든 type은 float(실수형)인데 2.14e+2 처럼 알 수 없는 숫자가 나올 경우는 경우가 있다. 이를 해석하는 방법은 생각보다 간단하다. 2.14e+2는 2.14*10^2=214  이다. 그러니 너무 복잡하게 생각을 안해도 된다. 또 다른 예시로2.98e-8=2.98*10^(-8) 가 있다. 

즉, e = 10 이라고 생각하면 되고, 거기에 붙인 +,- 기호는 지수승이라고 생각하면 된다. 

np.exp(a)
#out
array([[2.71828183e+00, 7.38905610e+00, 2.00855369e+01],
       [5.45981500e+01, 1.48413159e+02, 4.03428793e+02],
       [1.09663316e+03, 2.98095799e+03, 8.10308393e+03]])

딱 봤을 때는 이게 뭐지 라고 생각을 할 수 있다. 이 때 3행을 슬라이싱해서 보자.

np.exp(a)[2]
#out
array([1096.63315843, 2980.95798704, 8103.08392758])

1.09663316e +03 =  1.09663316 * 10^3 이라고 보면 된다.

np.sqrt(a) 은 exp 와 반대로 제곱근을 나타내는 함수이다.

np.sqrt(a)
#out
array([[1.        , 1.41421356, 1.73205081],
       [2.        , 2.23606798, 2.44948974],
       [2.64575131, 2.82842712, 3.        ]])

 

지금까지 numpy의 연산함수를 보았다. 이 함수들은 나중에 dataframe의 컬럼 값에 대해 튜닝이 필요할 때 많이 쓰니 꼭 알아두자.

 

자세한 코드는 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 - 1  (0) 2020.01.31
Numpy - 6  (2) 2020.01.22
Numpy array - 4  (0) 2020.01.07
Numpy array - 3  (0) 2020.01.07
Numpy array -2  (0) 2020.01.07

댓글