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와 팔로우 눌러주시면 감사하겠습니다.
'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 |
댓글