[์ธ๊ณต์ง๋ฅ] Numpy (๋ํ์ด)
- -
Numpy
ํ์ด์ฌ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ๋ถ์ ํ๊ฒฝ์์ NumPy1๋ ํ๋ ฌ ์ฐ์ฐ์ ์ํ ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
NumPy๋ “Numerical Python“์ ์ฝ์๋ก ๋๊ท๋ชจ ๋ค์ฐจ์ ๋ฐฐ์ด๊ณผ ํ๋ ฌ ์ฐ์ฐ์ ํ์ํ ๋ค์ํ ํจ์๋ฅผ ์ ๊ณตํ๋ค.
ํนํ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ์ ๋ฐฐ์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋ ํจ์จ์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค.
ํ์ด์ฌ list ๊ฐ์ฒด๋ฅผ ๊ฐ์ ํ NumPy์ ndarray ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์์ผ๋ ์ฐธ๊ณ ํ์!
NumPy๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ๋๋ค.
- ๊ฐ๋ ฅํ N ์ฐจ์ ๋ฐฐ์ด ๊ฐ์ฒด
- ์ ๊ตํ ๋ธ๋ก๋์ผ์คํ (Broadcast) ๊ธฐ๋ฅ
- C/C ++ ๋ฐ ํฌํธ๋ ์ฝ๋ ํตํฉ ๋๊ตฌ
- ์ ์ฉํ ์ ํ ๋์ํ, ํธ๋ฆฌ์ ๋ณํ ๋ฐ ๋์ ๊ธฐ๋ฅ
- ๋ฒ์ฉ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ค์ฐจ์ ์ปจํ ์ด๋
๋ณธ ๋ฌธ์๋ cs231n ๊ฐ์ข์ Python Numpy Tutorial ๋ฌธ์์ DataCamp์ Python For Data Science Cheat Sheet NumPy Basics ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ฌ ์์ฑํ์์ต๋๋ค.
์๋ ๋ ์๋ฃ๋ฅผ ์ฐธ๊ณ ํ์๋ฉด ์ดํด๊ฐ ์กฐ๊ธ ๋ ์ฌ์ธ ์ ์์ต๋๋ค.
taewan.kim/post/numpy_sum_axis/
taewan.kim/post/numpy_cheat_sheet/
1. numpy ํจํค์ง
numpy๋ ๊ณผํ ๊ณ์ฐ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก์ ๋ค์ฐจ์ ๋ฐฐ์ด์ ์ฒ๋ฆฌํ๋๋ฐ ํ์ํ ์ฌ๋ฌ ์ ์ฉํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์๋ค.
numpy๋ pip์ ์ฌ์ฉํ์ฌ ์๋์ ๊ฐ์ด ๊ฐ๋จํ ์ค์นํ ์ ์๋ค.
$ pip install numpy
$ pip install numpy
2. numpy ๋ฐฐ์ด
numpy์์ ๋ฐฐ์ด์ ๋์ผํ ํ์ ์ ๊ฐ๋ค์ ๊ฐ์ง๋ฉฐ, ๋ฐฐ์ด์ ์ฐจ์์ rank ๋ผ ํ๊ณ , ๊ฐ ์ฐจ์์ ํฌ๊ธฐ๋ฅผ ํํ๋ก ํ์ํ๋ ๊ฒ์ shape ๋ผ ํ๋ค. ์๋ฅผ ๋ค์ด, ํ์ด 2์ด๊ณ ์ด์ด 3์ธ 2์ฐจ์ ๋ฐฐ์ด์์ rank๋ 2 ์ด๊ณ , shape๋ (2, 3) ์ด ๋๋ค.
NumPy ๋ฐฐ์ด์ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ๋ค์ฐจ์ ๋ฐฐ์ด์ ์ง์ํ๋ค. NumPy ๋ฐฐ์ด์ ๊ตฌ์กฐ๋ “Shape“์ผ๋ก ํํ๋๋ค.
Shape์ ๋ฐฐ์ด์ ๊ตฌ์กฐ๋ฅผ ํ์ด์ฌ ํํ ์๋ฃํ์ ์ด์ฉํ์ฌ ์ ์ํ๋ค. ์๋ฅผ ๋ค์ด 28X28 ์ปฌ๋ฌ ์ฌ์ง์ ๋์ด๊ฐ 28, ํญ์ด 28, ๊ฐ ํฝ์ ์ 3๊ฐ ์ฑ๋(RGB)๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ ๊ฒ์ด๋ค. ์ฆ ์ปฌ๋ฌ ์ฌ์ง ๋ฐ์ดํฐ๋ Shaep์ด (28, 28, 3)์ธ 3์ฐจ์ ๋ฐฐ์ด์ด๋ค. ๋ค์ฐจ์ ๋ฐฐ์ด์ ์ ์ฒด์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ฉฐ, ๋ฐ์ดํฐ์ ์ฐจ์์ ์ฌ๋ฌ ๊ฐ๋์ ๋ฐ์ดํฐ ๋ฐฉํฅ์ ๊ฐ๋๋ค. ๋ค์ฐจ์ ๋ฐฐ์ด์ ๋ฐ์ดํฐ ๋ฐฉํฅ์ axis๋ก ํํํ ์ ์๋ค. ํ๋ฐฉํฅ(๋์ด), ์ด๋ฐฉํฅ(ํญ), ์ฑ๋ ๋ฐฉํฅ์ ๊ฐ๊ฐ axis=0, axis=1 ๊ทธ๋ฆฌ๊ณ axis=2๋ก ์ง์ ๋๋ค. NumPy ์ง๊ณ(Aggregation) ํจ์๋ ๋ฐฐ์ด ๋ฐ์ดํฐ์ ์ง๊ณ ๋ฐฉํฅ์ ์ง์ ํ๋ axis ์ต์ ์ ์ ๊ณตํ๋ค.
๊ทธ๋ฆผ 1: NumPy 1์ฐจ์, 2์ฐจ์ ๋ฐ 3์ฐจ์ ๋ฐฐ์ด๊ณผ Axis :http://taewan.kim/post/numpy_cheat_sheet/
์๋ colab์์ ์ค์ต์ ํด๋ณด์ ๋ ๋ฉ๋๋ค.
colab.research.google.com/github/decoz/mlclass/blob/master/1_numpy_basic.ipynb#scrollTo=B0wa9tKxTQU2
NumPy ๋ฐฐ์ด๊ณผ ํ์ด์ฌ ๋ฆฌ์คํธ์ ์ฐจ์ด
ํ์ด์ฌ์ ๋ฆฌ์คํธ๋ ์๋ฃ์ ์ ์ฅ์ ์ด์ ์ ๋๊ณ ์๋ค๋ฉด Numpy ์ ๋ฐฐ์ด์ ํนํ ์ํ์ ์ธ ํ๋ ฌ์ ํํ์ ๋ ์ค์ํ๋ค.
์ด๋ ๋ ์๋ฃํ์ ๊ธฐ๋ณธ์ฐ์ฐ์ ์ฐจ์ด์์ ์ ๋๋ฌ๋๋ค.
# ํ์ด์ฌ ๋ฐฐ์ด
arr1,arr2 = [1,2,3], [4,5,6]
print( "ํ์ด์ฌ ๋ฐฐ์ด ๋ง์
:", arr1 + arr2 )
# numpy ๋ฐฐ์ด
narr1 = np.array(arr1)
narr2 = np.array(arr2)
print( "numpy ๋ฐฐ์ด ๋ง์
:", narr1 + narr2 )
print( "numpy ๋ฐฐ์ด ๊ณฑ์
:", narr1 * narr2 )
์์์ ๋ณด๋ฏ์ด ๋ฆฌ์คํธ๋ + ์ฐ์ฐ์๊ฐ ๋ ๋ฆฌ์คํธ์ ํฉ๋ณ์ ์๋ฏธํ์ง๋ง Numpy ๋ ๋ ์๋ฃํ์ ๊ฐ์ ํฉ์ฐํ ๋ฐฐ์ด์ ์๋ฏธํ๋ค.
๋ํ Numpy ๋ ํ๋ ฌ์ด๋ฏ๋ก ๊ฐ ์ฐจ์์ ํฌ๊ธฐ๊ฐ ์ผ์ ํด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด์ ๋ค์์ 2์ฐจ์ ๋ฆฌ์คํธ๋ Numpy ๋ก ๋ณํ์
์์์ arr1 ์ ๋๊ฐ์ List๊ธธ์ด๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ 2์ฐจ์ ํ๋ ฌ๋ก ๋ณํ์ด ๋ถ๊ฐ๋ฅํ๋ค. ๊ทธ๋์ narr1์ ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ผ๋ก ๊ฐ๋ 1์ฐจ์ ํ๋ ฌ๋ก ๋ณํ์ด ๋์์ง๋ง narr2 ๋ 2x3 ์ผ๋ก ๋ณํ์ด ๊ฐ๋ฅํ๋ฏ๋ก 2์ฐจ์ ํ๋ ฌ๋ก ๋ณํ๋์๋ค.
Shape , Reshape
NumPy ๋ฐฐ์ด์ ๋ค์ฐจ์ ๋ฐฐ์ด์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ฉฐ ๋ชจ๋ NumPy ๋ฐฐ์ด์ shape ๋ฉ์๋๋ฅผ ํตํด ๊ทธ ์ฐจ์์ ์์๋ณผ ์ ์๋ค.
์ ์์ ๋ shape์ reshape์ ์์ ์ด๋ค.
๋ฐฐ์ด ์ด๊ธฐํ
์์์ ๋์จ np.array([1,2,3]) ์ฒ๋ผ ๋ฐฐ์ด์ ์ง์ ๊ฐ์ ์ค์ ๋ง๋ค ์ ๋ ์์ง๋ง ํฌ๊ธฐ๊ฐ ํฐ ๋ฐฐ์ด์ ๊ฒฝ์ฐ ์ฃผ๋ก ์ด๊ธฐํ ๋ฃจํด์ ํตํด ๋ง๋ค ์ ์๋ค. ์ด๋ ๋ฐฐ์ด์ ํฌ๊ธฐ์ ํํ๋ shape ๊ฐ์ ์ธ์๋ก ์ ๋ ฅํ๋ค.
0์ผ๋ก ์ด๊ธฐํํ๋ ๊ฒฝ์ฐ
# 3 x 2 ๋ฅผ 0์ผ๋ก ์ด๊ธฐํ
narr = np.zeros((3,2))
print(narr)
ํน์ ๊ฐ์ผ๋ก ์ด๊ธฐํ
# 2 x 4 ๋ฅผ 7 ์ด ์ด๊ธฐํ
narr = np.full((2,4), 7)
print(narr)
๋ฒ์์ง์
narr2 = np.array([[1,2,3], [4,5,6]])
print(narr2[0,0])
print("[:,:] -> \n", narr2[:,:],"\n")
print("[0,:] -> ", narr2[0,:]) # ์ฒซ์งธ ์ค
print("[:,1] -> ", narr2[:,0]) # ๋์งธ ์ด
๋ฒ์ ์ง์ ์์ 1)
narr = np.zeros((10,10))
narr[2:-2,2:-2] = 2 # ์์ 2๋ ์์์๋ถํฐ 0,1,2 ์ฆ 3๋ฒ์งธ ์ค์ ์ค๊ฒ ๋ค๋ ๊ฑฐ๊ณ , -2 ๋ ๋งจ ์๋์ ๋ถํฐ ์๋ก 0,1,2 ์ฆ 3์นธ ๋งํผ ์ฌ๋ผ๊ฐ๋จ ์๋ฆฌ. , ํ ์๋ ๊ฑด ๊ฐ๋ก
narr[1,1:9]= 1
narr[8,1:-1]= 1
print(narr)
์์ ) ๋ฐ๋ณต๋ฌธ ์์ด ๋ค์๊ณผ ๊ฐ์ Numpy ๋ฐฐ์ด์ ๋ง๋ค๊ธฐ
narr = np.zeros((10,10))
narr[1:-1,1:-1]=1
narr[2:-2,2:-2]=2
print(narr)
์์ ) ๋ฐ๋ณต๋ฌธ ์์ด ์์์ ์ง์ํฌ๊ธฐ ๋ฐฐ์ด์ ํ์ ์์น๋ง 0์ผ๋ก ๋ณํ
narr = np.array([1,2,3,4,5,6,7,8,9,10,11,12])
narr1 = np.array([1,2,3,4,5,6,7,8,9,10,11,12])
l = int(len(narr)/2) #์ง์
print(narr)
narr = narr.reshape(l,2) #2๊ฐ ์ง๋ฆฌ 6๊ฐ
narr[:,1]=0 #๋ชจ๋ ๋ฐฐ์ด์ index 1๋ฒ์งธ ์๋ฆฌ๋ฅผ ๋ค 0์ผ๋ก ์นํ
print(narr.reshape(1,12))
#์์ ๊ฐ์ ๋ฐฉ๋ฒ์ด ๊ฐ๋ฅ ํ ์ค ์์์ผ๋, ์๋๋ 1์ฐจ์ ๋ฐฐ์ด์ด๊ณ ์ดํ ์ถ๋ ฅ๋ ๊ฒ์ 2์ฐจ์ ๋ฐฐ์ด์ด๋ค.
#๊ฐ์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด, ์ํฅ์ ๋ฏธ์น ๊ฒ ๊ฐ์ narr1์ผ๋ก ์ ์
narr1.reshape(l,2)[:,1]=0
print(narr1)
Matplotlib ๋ฅผ ์ฌ์ฉํ ๋ฐฐ์ด ์๊ฐํ
Matplotlib ๋ ํ์ด์ฌ์์ ํ, ์ด๋ฏธ์ง, ํ์คํ ๊ทธ๋จ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ์๊ฐํ ํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
ํนํ ๊ทธ์ค์ pyplot ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฃผ ์ฌ์ฉํ๋๋ฐ ๋ค์๊ณผ ๊ฐ์ด ๋ถ๋ฌ์จ๋ค.
import matplotlib.pyplot as plt
๊ธฐ๋ณธ ์์ ) ๊ฐ์ฅ ๊ธฐ์ด์ ์ธ 1์ฐจ์ ๋ฐฐ์ด(x,y)๋ฅผ ๊ธฐ์ฌํด์ฃผ์ง ์์ผ๋ฉด x๊ฐ 1,2,3,4 ..y ๊ฐ ์ ํด์ค ๊ฐ์ผ๋ก ๋ค์ด๊ฐ.
import matplotlib.pyplot as plt
narr = np.array([1,3,2,5,4])
plt.plot(narr)
plt.show()
์์ ) ์ฌ๋ฌ ๊ทธ๋ํ ํฉ์น๊ธฐ
from matplotlib import pyplot as plt
plt.plot([1,2,3],[1,4,9])
plt.plot([2,3,4],[5,6,7])
plt.xlabel('Sequence')
plt.ylabel('Time(secs)')
plt.title('Experiment Result')
plt.legend(['Mouse','Cat'])
plt.show()
๋ฐฐ์ด์ ์ฐ๊ฒฐ์ด ์๋ ์ , ํน์ ๋ค๋ฅธ ๊ธฐํธ๋ก ํํ ํ ์ ์๋ค.
narr = np.array([1,3,2,5,4])
narr1 = np.array([2,3,4,5,6])
narr2 = np.array([5,4,3,2,1])
narr3 = np.array([4,2,4,2,6])
plt.plot(narr, '+') # ์ด๋ค ์ ์ผ๋ก ํํํ ์ง(๋งํฌ -> . + * ๋ฑ ์ ๊ธฐํธ๊ฐ ์๋ค.)
plt.plot(narr1, '-')
plt.plot(narr2, '*')
plt.plot(narr3, 'o')
plt.show()
ํ์คํ ๊ทธ๋จ์ผ๋ก ํํํ ์๋ ์๋ค.
narr = np.array([1,1,2,2,3,4,4,4,5,5,4])
#plt.hist(narr, 3)
#plt.hist(narr, 5) # 3์ ๋ฐ์ดํฐ ์์ญ์ 3๊ฐ์ ์์ญ์ผ๋ก ๋๋๋ค๋ ๋ป //์ต๋ ๊ฐ์์ ๋ถํฉํจ.
plt.hist(narr, 6) # ํ๊ฐ๊ฐ ๋น๋ ์ด์ ๋ ์ซ์ ์ข
๋ฅ๊ฐ 5๊ฐ์ง๋ผ์
plt.show()
1์ฐจ์ ๋ฐ์ดํฐ๋ฅผ plot ์ ์ฌ์ฉํ์ฌ ๋์ํ ํ ๊ฒฝ์ฐ x ์ถ์ ์๋์ ์ผ๋ก ์ฑ์์ง๋ค.
ํ์ง๋ง ๋๊ฐ์ ๋ฐฐ์ด์ ๋ฃ์ผ๋ฉด ๊ฐ๊ฐ์ x์ y๊ฐ์ผ๋ก ๊ฐ์ฃผํ๋ค.
์์ ) [x1,y1, x2,y2, x3,y3 .. ] ์ผ๋ก ๊ตฌ์ฑ๋ ์ง์ ํฌ๊ธฐ์ ๋ฐฐ์ด์ ๊ฐ ์ (x1,y1), (x2,y2), .. ๋ฅผ ํ๋ฉด์ ๊ทธ๋ ค๋ณด์.
narr = np.array([1,1,1,2,1,3,1,4,1,5,2,2,3,3,4,4,5,1,5,2,5,3,5,4,5,5]) # ์์ ์ฉ ๋ฐฐ์ด
#์ฐ์ต๋ฌธ์ ์ ํ์ด๋ฅผ ์์ฑํด๋ณด์ธ์
l = int(len(narr)/2)
y=narr.reshape(l,2)[:,1]
x= narr.reshape(l,2)[:,0]
plt.plot(x,y,'o')
plt.show()
์์ ) ๋ฐ๋ณต์์ด ๊ฐ๋ก/์ธ๋ก์ค ๋ง๋ค๊ธฐ
1. ์ธ๋ก
100x100 ์ ๋ฐฐ์ด์ด ์์๋ ๋ฐ๋ณต๋ฌธ ์์ด ๋ฐฐ์ด์ reshape๋ฅผ ์ด์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด๋ณด์
narr = np.zeros((100,100)) #์ด 10000๊ฐ์ ์ ์ด ......ํด์ ๋ชจ์ธ๊ฒ
narr = narr.reshape(1000,10) #10๊ฐ์ง๋ฆฌ 1000๊ฐ
narr[:,5]= 255 #y์ถ์ ์ ์ ์๊ธฐ๊ฒ ํด์ค. ์ฐ๊ฒฐ๋์ ์ ์ฒ๋ผ ๋ณด์. 0์ผ๋ก ํ๋ฉด 0๋ถํฐ start์ธ๋ฐ, 5๋ฅผ ์จ์ค์ ๊ฐ๋ก๋ก 5๋งํผ ๋์์ง ๊ณณ๋ถํฐ ์์.
narr = narr.reshape(100,100) #100 *100์ ์ฒจ ๋ชจ์ต์ผ๋ก ๋ค์ ๋๋ฆผ
plt.imshow(narr, cmap='gray')
plt.show()
2. ๊ฐ๋ก (์ 3์ฐจ์์ธ์ง ๊ทธ๋ฆผ์ ์ดํดํ๋ ๊ฒ์ด ์ค์)
narr = np.zeros((100,100)) #์ด 10000๊ฐ์ ์ ์ด ......ํด์ ๋ชจ์ธ๊ฒ
narr = narr.reshape(10,10,100) #๊ฐ๋ก๋ 3์ฐจ์์ผ๋ก ํด์ผํจ.
narr[:,5,:]= 255 # 255๋ ์์์ ๋ํ๋ธ๋ค.
narr = narr.reshape(100,100) #100 *100์ ์ฒจ ๋ชจ์ต์ผ๋ก ๋ค์ ๋๋ฆผ
plt.imshow(narr, cmap='gray')
plt.show()
3. ๋์ ํฉ์นจ
narr = np.zeros((100,100)) #์ด 10000๊ฐ์ ์ ์ด ......ํด์ ๋ชจ์ธ๊ฒ
narr = narr.reshape(1000,10)
narr[:,5] =255
narr = narr.reshape(10,10,100) #๊ฐ๋ก๋ 3์ฐจ์์ผ๋ก ํด์ผํจ.
narr[:,5,:]= 255 # 255๋ ์์์ ๋ํ๋ธ๋ค.
narr = narr.reshape(100,100) #100 *100์ ์ฒจ ๋ชจ์ต์ผ๋ก ๋ค์ ๋๋ฆผ
plt.imshow(narr, cmap='gray')
plt.show()
'IT & Security > AI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ธ๊ณต์ง๋ฅ] ํ๊ท๋ถ์ (0) | 2021.04.05 |
---|---|
[์ธ๊ณต์ง๋ฅ] ๋ํ์ด ์์ฉ | ์ฐ์ฐ | ์ธ๊ณต์ง๋ฅ | ํ์ด์ฌ ๋ํ์ด (0) | 2021.03.23 |
[์ธ๊ณต์ง๋ฅ] Google Colab (0) | 2021.03.08 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค