ํด๋น ๊ฐ์๋ 30๋ถ ๋ฌด๋ฃ ์์ฝ๊ฐ์ข๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ ํ๋ธ, ์ธํ๋ฐ, Edwith์์ ๋ฌด๋ฃ๋ก ์์ฒญ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ชฉ์ฐจ
Numpy๋
- C์ธ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ด๋ถ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ฌ ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๋ค.
- ๋ค์ฐจ์ ๋ฐฐ์ด(ndarray)์ ํธ๋ฆฌํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ง์ํด์ฃผ๋ ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
ย
โป ndarray vs list
- ndarray : ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ณ , ๋ชจ๋ ์์๋ ๊ฐ์ ์๋ฃํ์ ๊ฐ์ง๋ค.
- list : ์๋๊ฐ ๋งค์ฐ ๋๋ฆฌ๊ณ , ์์๊ฐ ๊ฐ๊ฐ ๋ค๋ฅธ ์๋ฃํ์ ๊ฐ์ง ์ ์๋ค.
ndarray
- N-dimensional Array
- ๋ค์ฐจ์ ๋ฐฐ์ด์ ์ง์ํ๋ค.
- ์๋ก ๋ค๋ฅธ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ์ ์๋ค.
- ๋ด๋ถ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํด์ ์๋๊ฐ ๋น ๋ฅด๋ค.
- ๋ฐฐ์ด ๊ฐ์ ์ฐ์ ์ฐ์ฐ์ด ๊ฐ๋ฅํ๋ค.
ย
๋ฐ์ดํฐ ํ์ ์ข ๋ฅ
- int(8bit, 16bit, 32bit, 64bit) i1, i2, i4, i8
- ๋ถํธ๊ฐ ์๋ค.
- ๋นํธ์ ๋งํผ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ ์ ์ํ์ด๋ค.
- ์ ์ฅํ ์ ์๋ ๊ฐ์ ๋ฒ์ : -2โฟโปยน ~ 2โฟโปยน-1
ย
2. uint(8bit, 16bit, 32bit, 64bit) u1, u2, u4, u8
- ๋ถํธ๊ฐ ์๋ค.
- ๋นํธ์ ๋งํผ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ ์ ์ํ์ด๋ค.
- ์ ์ฅํ ์ ์๋ ๊ฐ์ ๋ฒ์ : 0 ~ 2โฟ-1
ย
3. float(16bit, 32bit, 64bit, 128bit) f2, f4, f8, f16
- ๋ถํธ๊ฐ ์๋ค.
- ๋นํธ์ ๋งํผ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ ์ค์ํ์ด๋ค.
ย
4. ๋ณต์์ํ
- complex64 : ๋๊ฐ์ 32๋นํธ ๋ถ๋ ์์์ ์ผ๋ก ํ์๋๋ ๋ณต์์ c8
- complex128 : ๋๊ฐ์ 64๋นํธ ๋ถ๋์์์ ์ผ๋ก ํ์๋๋ ๋ณต์์ c16
ย
5. unicode
- ๊ณ ์ ๊ธธ์ด ๋ฌธ์์ด unicode
ย
6. bool
- True, False
ย
7. ๋ฐ์ดํฐ ํ์
ํ์ธ ๋ฐ ๋ณ๊ฒฝ
- dtype : ์๋ฃํ ํ์ธ
- astype : ์๋ฃํ ๋ณ๊ฒฝ
ย
์
๋ ฅ
import numpy as np
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] a = np.array(data) a
ย
์ถ๋ ฅ
array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
ย
์
๋ ฅ
a.dtype
ย
์ถ๋ ฅ
dtype('int32')
ย
์
๋ ฅ
a = a.astype(np.float32) a
ย
์ถ๋ ฅ
array([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]], dtype=float32)
ย
์
๋ ฅ
a[0][1]
ย
์ถ๋ ฅ
2.0
ย
์
๋ ฅ
a[0]
ย
์ถ๋ ฅ
array([1., 2., 3.], dtype=float32)
ย
- np.arange(start, stop, step) : step์ ๋ฐ๋ผ ์ฆ๊ฐํ๋ ์์ด์ ์์ฑํ๋ค.
- reshape : ๋ง๋ค์ด์ง ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ๊ฐ์ง๊ณ ํํ๋ฅผ ๋ฐ๊ฟ์ค๋ค.
์
๋ ฅ
np.arange(1, 10, 2) # (start, stop, step)
ย
์ถ๋ ฅ
array([1, 3, 5, 7, 9])
ย
์
๋ ฅ
np.arange(1, 10).reshape(3, 3)
ย
์ถ๋ ฅ
array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
ย
์
๋ ฅ
np.arange(1, 13).reshape(3, 2, 2)
ย
์ถ๋ ฅ
array([[[ 1, 2], [ 3, 4]], [[ 5, 6], [ 7, 8]], [[ 9, 10], [11, 12]]])
ย
- nan
- ์๋ฃํ์ด Floatํ์ด๋ฏ๋ก Integer์์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
- ๋ฐฐ์ด์์ ์ฐ์ฐํ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ง๋ง ๊ฒฐ๊ณผ๊ฐ์ด NaN์ด ๋๋ค.
์
๋ ฅ
np.nan * 10
ย
์ถ๋ ฅ
nan
ย
์
๋ ฅ
a[0][1] = np.nan a
ย
์ถ๋ ฅ
array([[ 1., nan, 3.], [ 4., 5., 6.], [ 7., 8., 9.]], dtype=float32)
ย
์
๋ ฅ
a = np.arange(1, 10).reshape(3, 3) a
ย
์ถ๋ ฅ
array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
ย
์
๋ ฅ
a[0][1] = np.nan # integer์์๋ nan์ ์ฌ์ฉ ํ ์ ์๋ค.
ย
์ถ๋ ฅ
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-15-10bef5bd968c> in <module> ----> 1 a[0][1] = np.nan ValueError: cannot convert float NaN to integer
ย
์
๋ ฅ
a = np.linspace(1, 10, 20) # (start, stop, num) a
ย
์ถ๋ ฅ
array([ 1. , 1.47368421, 1.94736842, 2.42105263, 2.89473684, 3.36842105, 3.84210526, 4.31578947, 4.78947368, 5.26315789, 5.73684211, 6.21052632, 6.68421053, 7.15789474, 7.63157895, 8.10526316, 8.57894737, 9.05263158, 9.52631579, 10. ])
์ฐ์ฐ
- ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ง ์์๋, ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ ๋ฐ๋ณต์ฐ์ฐ์ด ์ฌ์ฉ๋๋ค.
- ์ ํ ๋์ ์์ ์ฌ์ฉํ์ฌ ์ฐ์ฐ ๊ฐ๋ฅํ๋ค.
- np.dot, @ : ํ๋ ฌ ๊ณฑ ๊ตฌํ๋ ์ฐ์ฐ
์
๋ ฅ
data = np.arange(1, 10).reshape(3, 3) data
ย
์ถ๋ ฅ
array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
ย
์
๋ ฅ
data + data
ย
์ถ๋ ฅ
array([[ 2, 4, 6], [ 8, 10, 12], [14, 16, 18]])
ย
์
๋ ฅ
[1, 2, 3] + [4, 5, 6] # ๋ฆฌ์คํธ๋ผ๋ฆฌ ๋ํ๋ฉด ์ฐ๊ฒฐ๋๋ค.
ย
์ถ๋ ฅ
[1, 2, 3, 4, 5, 6]
ย
์
๋ ฅ
data - data
ย
์ถ๋ ฅ
array([[0, 0, 0], [0, 0, 0], [0, 0, 0]])
ย
์
๋ ฅ
data * data
ย
์ถ๋ ฅ
array([[ 1, 4, 9], [16, 25, 36], [49, 64, 81]])
ย
์
๋ ฅ
data / data
ย
์ถ๋ ฅ
array([[1., 1., 1.], [1., 1., 1.], [1., 1., 1.]])
ย
์
๋ ฅ
np.dot(data, data)
ย
์ถ๋ ฅ
array([[ 30, 36, 42], [ 66, 81, 96], [102, 126, 150]])
ย
์
๋ ฅ
data@data
ย
์ถ๋ ฅ
array([[ 30, 36, 42], [ 66, 81, 96], [102, 126, 150]])
ย
์ฐจ์
- 0์ฐจ์ : Scalar (ํ๋์ ๋ฐ์ดํฐ ๊ฐ์ผ๋ก๋ง ์กด์ฌํ๋ ๊ฒ)
- 1์ฐจ์ : Vector (์ซ์๋ค์ ๋ฐฐ์ด (1D array))
- 2์ฐจ์ : Matrix (์ซ์๋ค์ 2D array (rows: ํ, columns: ์ด))
- 3์ฐจ์ ์ด์ : Tensor (์ซ์๋ค์ ๋ค์ฐจ์ ๋ฐฐ์ด)
์
๋ ฅ
# 0์ฐจ์ a = np.array(1) print(a) print(a.shape) print(a.ndim)
ย
์ถ๋ ฅ
1 () 0
ย
์
๋ ฅ
# 1์ฐจ์ a = np.array([1]) print(a) print(a.shape) print(a.ndim)
ย
์ถ๋ ฅ
[1] (1,) 1
ย
์
๋ ฅ
# 1์ฐจ์ a = np.array([1, 2, 3, 4, 5]) print(a) print(a.shape) print(a.ndim)
ย
์ถ๋ ฅ
[1 2 3 4 5] (5,) 1
ย
์
๋ ฅ
# 2์ฐจ์ a = np.array([[1, 2, 3], [4, 5, 6]]) print(a) print(a.shape) print(a.ndim)
ย
์ถ๋ ฅ
[[1 2 3] [4 5 6]] (2, 3) 2
ย
์
๋ ฅ
# 2์ฐจ์ a = np.array([[1]]) print(a) print(a.shape) print(a.ndim)
ย
์ถ๋ ฅ
[[1]] (1, 1) 2
ย
์
๋ ฅ
# 3์ฐจ์ a = np.array([[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]]]) print(a) print(a.shape) print(a.ndim)
ย
์ถ๋ ฅ
[[[ 1 2] [ 3 4] [ 5 6]] [[ 7 8] [ 9 10] [11 12]]] (2, 3, 2) 3
ย
matrix ์ ํ
- zeros : 0์ผ๋ก ์ด๊ธฐํ๋ ๋ฐฐ์ด ์์ฑ
- ones : 1๋ก ์ด๊ธฐํ ๋ ๋ฐฐ์ด ์์ฑ
- eye : ์ฃผ๋๊ฐ์ ์ ์์๊ฐ ๋ชจ๋ 1์ด๊ณ ๋๋จธ์ง ์์๋ 0์ธ ์ ์ฌ๊ฐํ๋ ฌ (๋จ์ํ๋ ฌ)
- empty : ์ด๊ธฐํ ํ์ง ์๊ณ ๋ฐฐ์ด๋ง ์์ฑ, ๊ธฐ์กด์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์ด ์๋ ๊ฐ์ผ๋ก ๋ํ๋จ
- full : ์ง์ ํ ์ซ์๋ก ์ด๊ธฐํ
- linespace(start, end(ํฌํจ), number, endpoint = ) : ์ ํ ๊ตฌ๊ฐ์ ์ง์ ํ ๊ฐ์๋งํผ ๋ถํ ํ๋ค.
- endpoint = True or False : ๋ง์ง๋ง ๊ฐ์ ํฌํจ์ํฌ์ง ์ํค์ง ์์์ง ์ ํ
์
๋ ฅ
a = np.arange(12).reshape(2,3,2) a
ย
์ถ๋ ฅ
array([[[ 0, 1], [ 2, 3], [ 4, 5]], [[ 6, 7], [ 8, 9], [10, 11]]])
ย
์
๋ ฅ
b = np.ones(12) b
ย
์ถ๋ ฅ
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
ย
์
๋ ฅ
b = np.ones(12).reshape(2, 3, 2) b
ย
์ถ๋ ฅ
array([[[1., 1.], [1., 1.], [1., 1.]], [[1., 1.], [1., 1.], [1., 1.]]])
ย
์
๋ ฅ
c = np.zeros(12).reshape(2, 3, 2) c
ย
์ถ๋ ฅ
array([[[0., 0.], [0., 0.], [0., 0.]], [[0., 0.], [0., 0.], [0., 0.]]])
ย
์
๋ ฅ
d = np.eye(3) d
ย
์ถ๋ ฅ
array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
ย
์
๋ ฅ
e = np.zeros([3, 4]) e
ย
์ถ๋ ฅ
array([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]])
ย
์
๋ ฅ
e = np.zeros([3, 4, 2]) e
ย
์ถ๋ ฅ
array([[[0., 0.], [0., 0.], [0., 0.], [0., 0.]], [[0., 0.], [0., 0.], [0., 0.], [0., 0.]], [[0., 0.], [0., 0.], [0., 0.], [0., 0.]]])
ย
์
๋ ฅ
f = np.empty([2, 3]) f
ย
์ถ๋ ฅ
array([[2.12199579e-314, 6.36598737e-314, 1.06099790e-313], [1.48539705e-313, 1.90979621e-313, 2.33419537e-313]])
ย
์
๋ ฅ
g = np.full((3, 4), 1000) g
ย
์ถ๋ ฅ
array([[1000, 1000, 1000, 1000], [1000, 1000, 1000, 1000], [1000, 1000, 1000, 1000]])
ย
์
๋ ฅ
h = np.linspace(2, 10, 6) h
ย
์ถ๋ ฅ
array([ 2. , 3.6, 5.2, 6.8, 8.4, 10. ])
ย
์ง๊ณํจ์
- mean : ํ๊ท ์ ๊ตฌํ๋ ํจ์
- median : ๋ฐ์ดํฐ๋ฅผ ํฌ๊ธฐ๋ก ์ ๋ ฌํ๊ณ ๊ทธ ์ค ๊ฐ์ด๋ฐ ์ ์ถ๋ ฅํ๋ ํจ์
โป ๋ง์ฝ ๋ฐ์ดํฐ ๊ฐ์๊ฐ ์ง์์ผ ๊ฒฝ์ฐ ๊ฐ์ฅ ๊ฐ์ด๋ฐ์ ๋ ์์ ํ๊ท ์ ๊ตฌํ๋ค.
- var : ๋ถ์ฐ ๊ตฌํ๋ ํจ์
- std : ํ์คํธ์ฐจ ๊ตฌํ๋ ํจ์
- sum : ํฉ๊ณ ๊ตฌํ๋ ํจ์
- max : ๊ฐ์ฅ ํฐ ์๋ฅผ ๊ตฌํ๋ ํจ์
- min : ๊ฐ์ฅ ์์ ์๋ฅผ ๊ตฌํ๋ ํจ์
์
๋ ฅ
a = np.arange(10).reshape(2,5) a
ย
์ถ๋ ฅ
array([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]])
ย
์
๋ ฅ
a[0][0] = 100 a
ย
์ถ๋ ฅ
array([[100, 1, 2, 3, 4], [ 5, 6, 7, 8, 9]])
ย
์
๋ ฅ
a[0, 1] = 1000 a
ย
์ถ๋ ฅ
array([[ 100, 1000, 2, 3, 4], [ 5, 6, 7, 8, 9]])
ย
์
๋ ฅ
np.mean(a)
ย
์ถ๋ ฅ
114.4
ย
์
๋ ฅ
np.median(a)
ย
์ถ๋ ฅ
6.5
ย
์
๋ ฅ
np.std(a)
ย
์ถ๋ ฅ
296.5485457728633
ย
์
๋ ฅ
np.var(a)
ย
์ถ๋ ฅ
87941.04
ย
์
๋ ฅ
np.sum(a)
ย
์ถ๋ ฅ
1144
ย
์
๋ ฅ
sum(a)
ย
์ถ๋ ฅ
array([ 105, 1006, 9, 11, 13])
ย
์
๋ ฅ
a
ย
์ถ๋ ฅ
array([[ 100, 1000, 2, 3, 4], [ 5, 6, 7, 8, 9]])
ย
์
๋ ฅ
np.sum(a, axis=0)
ย
์ถ๋ ฅ
array([ 105, 1006, 9, 11, 13])
ย
์
๋ ฅ
np.sum(a, axis=1)
ย
์ถ๋ ฅ
array([1109, 35])
ย
์
๋ ฅ
np.max(a)
ย
์ถ๋ ฅ
1000
ย
์
๋ ฅ
np.min(a)
ย
์ถ๋ ฅ
2