μƒˆμ†Œμ‹

IT & Security/AI

[인곡지λŠ₯] λ„˜νŒŒμ΄ μ‘μš© | μ—°μ‚° | 인곡지λŠ₯ | 파이썬 λ„˜νŒŒμ΄

  • -
λ°˜μ‘ν˜•

https://techscript24.com/how-to-start-with-numpy-for-beginners/

 


 

0. ν™˜κ²½ μ„€μ •

λ¨Όμ €, ν™œμš©μ„ μœ„ν•΄μ„œ μ„ΈνŒ…μ„ μ•„λž˜μ™€ 같이 ν•΄μ£Όμž.

import numpy as np
import matplotlib.pyplot as plt

1. 숫자 μ—°μ‚°

narr = np.array([[1,2],[3,4]])
print(narr + 2) 	// 배열에 2μ”© 더해진닀.
print(narr * 2)		// 배열에 2μ”© 곱해진닀.
print(narr / 2)		// 배열에 2μ”© λ‚˜λˆ μ§„λ‹€.


2. μˆ˜ν•™μ—°μ‚°

numpyλŠ” 사칙연산 외에도 μ—¬λŸ¬ μˆ˜ν•™ ν•¨μˆ˜λ₯Ό λ°°μ—΄ 전체에 λŒ€ν•΄ μ‚¬μš©ν•  수 μžˆλ„λ‘, μ•„λž˜μ™€ 같은 ν•¨μˆ˜λ₯Ό μ§€μ›ν•œλ‹€.

  • np.log : 둜그 μ—°μ‚°
  • np.exp : μ§€μˆ˜ μ—°μ‚°
  • np.sqrt : 루트 μ—°μ‚°

 

예제λ₯Ό ν†΅ν•΄μ„œ, μ•Œμ•„λ³΄μž.

# 0 ~ 2π 사이에 100개의 값을 생성
arr = np.linspace(0.1,1,10) 

# sin graph 생성
plt.plot( np.log( arr ), label = 'log' )
plt.plot( np.exp( arr ), label = 'exp')
plt.plot( np.sqrt(arr ), label = 'sqrt')
plt.legend()
plt.show()

linspace( ) ν•¨μˆ˜λŠ” 파이썬 numpy λͺ¨λ“ˆμ— ν¬ν•¨λœ ν•¨μˆ˜λ‘œ 1차원 λ°°μ—΄, κ·Έλž˜ν”„ κ·Έλ¦¬κΈ°μ—μ„œ μˆ˜ν‰μΆ•μ˜ 간격 λ§Œλ“€κΈ° 등에 맀우 νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλŠ” ν•¨μˆ˜μ΄λ‹€. ν•΄λ‹Ή ν•¨μˆ˜λŠ” linspace(start, stop, num)ν˜•μ‹μœΌλ‘œ μ‚¬μš©λœλ‹€.

 


μ‚Όκ°ν•¨μˆ˜λŠ” μ–΄λ–€ 주기성을 가진 데이터λ₯Ό ν‘œν˜„ν•˜λŠ” λ°©λ²•μœΌλ‘œ 널리 μ‚¬μš©λœλ‹€. 삼각 ν•¨μˆ˜λŠ” cos, sin, tan 둜 이뀄진닀.

 

μ΄λ•Œ μž…λ ₯값은 일반적인 360도 μˆ˜μΉ˜κ°€ μ•„λ‹ˆλΌ 파이(π = 3.14... ) λ₯Ό κΈ°μ€€μœΌλ‘œ ν‘œν˜„λœλ‹€.

μ΄λŠ” np.pi λΌλŠ” 라이브러리 λ‚΄μž₯ μƒμˆ˜λ₯Ό μ΄μš©ν•΄μ„œ ν‘œν˜„μ΄ κ°€λŠ₯ν•˜λ‹€.

 


  • np.sin : 사인 μ—°μ‚°
  • np.cos : 코사인 μ—°μ‚°
  • np.tan : νƒ„μ  νŠΈ μ—°μ‚°

 

예제 μ½”λ“œ) 

# 0 ~ 2π 사이에 100개의 값을 생성
arr = np.linspace(0,np.pi * 2,100) 

# sin graph 생성
plt.title("sin cos")
plt.plot( np.sin( arr ), label = 'sin' )
plt.plot( np.cos( arr ), label = 'cos')
plt.legend()
plt.show()

print() 
plt.title("tan")
plt.plot( np.tan( arr ) )
plt.show()

 


문제 1. sin을 μ΄μš©ν•˜μ—¬ μ•„λž˜ κ·Έλž˜ν”„λ₯Ό κ·Έλ¦¬λŠ” 방법을 생각해봐라.

 

μ •λ‹΅)

더보기
arr = np.linspace(0,np.pi*4,100)
plt.plot(np.sin(arr))
plt.plot(np.sin(arr)*-1)
plt.show()

3. 쑰건연산

배열을 단일 κ°’κ³Ό λΉ„κ΅μ‹œ, 각각의 값에 λŒ€ν•œ 비ꡐ κ²°κ³Όλ₯Ό True 와 False ν˜•νƒœλ‘œ λ¦¬ν„΄ν•œλ‹€.

narr = np.array([1,2,3,4,5])
print( narr > 2 ) 
narr = np.array([[1,2],[3,4]])
print( narr % 2 == 0 ) 


4. λ°°μ—΄μ—°μ‚°

NumpyλŠ” λ°°μ—΄λΌλ¦¬μ˜ 연산을 μ§€μ›ν•œλ‹€.

κ·œμΉ™μ€ λ³΅μž‘ν•˜μ§€λ§Œ, μ‚¬μš©ν•˜λŠ” 방법을 읡히면 μƒλ‹Ήνžˆ λ³΅μž‘ν•œ κΈ°λŠ₯도 λ°°μ—΄λΌλ¦¬μ˜ μ—°μ‚°μœΌλ‘œ κ°„λ‹¨νžˆ κ΅¬ν˜„ν•  수 μžˆλ‹€.

na1 = np.array( [[1,2],[3,4]] )  # shape : (2,2)
na2 = np.array( [[1,2]] ) # shape : (1,2)
na3 = np.array( [[1],[2]]) # shape : (2,1)

print( na1 + na2 ) 
print( na1 + na3 ) 


Numpy 의 λ°°μ—΄λΌλ¦¬μ˜ 연산은 같은 동일 차원(xμΆ•, yμΆ•λ“±.. ) 길이가 κ°™κ±°λ‚˜ λ˜λŠ” ν•œμͺ½μ΄ 1μΌλ•Œ ν—ˆμš©λœλ‹€.

 

단 μ°¨μ›μ˜ 크기닀 λ‹€λ₯Όλ•ŒλŠ” μ•žμ˜ 차원은 1둜 κ°„μ£Όλœλ‹€.

μ•„λž˜μ—λŠ” μ„œλ‘œ 연산이 κ°€λŠ₯ν•œ μ˜ˆμ‹œμ΄λ‹€.

(2,2) + (2,)
(2,2) + (1,2) 
(2,2) + (2,1)
 
(3,1) + (1,2)
 
(1,2,3) + (1,2,1)
(1,2,3) + (1,1,3)
(1,2,3) + (1,2,3)
(1,2,3) + (2,3)
(1,2,3) + (1,3)
(1,2,3) + (3,)

3차원 μ΄μƒμ˜ λ°°μ—΄μ—μ„œλ„ μœ νš¨ν•˜λ‹€.

μ•„λž˜λŠ” 그에 λ”°λ₯Έ μ˜ˆμ΄λ‹€.

(4,3,2) + (3,1)  = (4,3,2) + (1,3,1)

full( )은 배열에 μ‚¬μš©μžκ°€ μ§€μ •ν•œ 값을 λ„£λŠ”λ° μ‚¬μš©ν•œλ‹€.

na1 = np.full((4,3,2),2)
na2 = np.full((1,2),2)

print( na1 + na2 ) 


특히 (n,1) κ³Ό (1,m) 같이 μ„œλ‘œ 1 λŒ€ n 을 μ—‡κ°ˆλ € μ—°μ‚°ν•  경우 n x m 의 행렬이 μƒμ„±λœλ‹€.

x1,x2 = np.array([0,1,2]), np.array([[1],[2],[3],[4]]) 
print(x1)
print(x2)
print(x1 + x2)


문제 2. 99단 ν–‰λ ¬ λ§Œλ“€κΈ°

arrage와 ν–‰λ ¬ 연산을 μ΄μš©ν•΄ μ•„λž˜μ™€ 같은, 99단 행렬을 λ§Œλ“œμ‹œμ˜€.

μ •λ‹΅)

x,y=np.arange(1,10), np.arange(2,10)

print(x*y.reshape(8,1))

문제 3. ( n, ) 두 개λ₯Ό ( n,2 )둜 ν•©μΉ˜κΈ°

같은 n의 길이λ₯Ό κ°–λŠ” λ‘κ°œμ˜ 1차원 배열이 μžˆλ‹€κ³  κ°€μ •ν•΄λ³΄μž.

두 배열을 각각의 μ—΄λ‘œ κ°–λŠ” ( n,2 ) ν˜•νƒœμ˜ 배열을 λ°°μ—΄ 연산을 μ΄μš©ν•΄ λ§Œλ“€μ–΄λ³΄μž.

μ •λ‹΅)

arr1 = np.array([1,2,3,4,5,6]).reshape(6,1)
arr2 = np.array([0,10,20,30,40,50]).reshape(6,1)

arr3 = arr1*np.array([1,0])
arr4 = arr2*np.array([0,1])
print(arr3+arr4)

문제 4. 컬러 κ·ΈλΌλ°μ΄μ…˜ λ°°μ—΄

np.linspaceλ₯Ό μ‚¬μš©ν•΄μ„œ μ•„λž˜μ™€ 같이, (100,100,3) 이미지λ₯Ό κ°–λŠ” 배열을 μƒμ„±ν•΄λ³΄μž.

μ •λ‹΅)

narr = np.full((100,100,3),[0,0,0])
x = np.linspace(0,255,100).astype('int')

plt.imshow(narr+x.reshape(100,1,1)*[1,0,0])

문제 5. sin κ·Έλž˜ν”„μ˜ 2차원화

λ‹€μŒ 0λΆ€ν„° np.piκΉŒμ§€μ˜ sin곑선과 같은 λΉ„μœ¨λ‘œ 밝기가 λ³€ν™”ν•˜λŠ” (100,100)의 2차원 흑백이미지λ₯Ό μƒμ„±ν•΄λ³΄μž.

 

μ•„λž˜λŠ” 기본으둜, 주어진 ν˜•μ‹μ΄λ‹€.

# 100개의 점으둜 이뀄진 1차원 sin 곑선
x = np.sin(np.linspace(0,np.pi,100))
plt.plot(x)
plt.show() 

μ •λ‹΅)

x = np.sin(np.linspace(0,np.pi,100))
plt.plot(x)
plt.show() 

y = x.reshape(100,1)
plt.imshow(x*y, cmap = 'gray')
λ°˜μ‘ν˜•

'IT & Security > AI' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[인곡지λŠ₯] νšŒκ·€λΆ„μ„  (0) 2021.04.05
[인곡지λŠ₯] Numpy (λ„˜νŒŒμ΄)  (0) 2021.03.15
[인곡지λŠ₯] Google Colab  (0) 2021.03.08
Contents

ν¬μŠ€νŒ… μ£Όμ†Œλ₯Ό λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€

이 글이 도움이 λ˜μ—ˆλ‹€λ©΄ 곡감 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.