Post

NumPy Cheat Sheet

NumPy Cheat Sheet

πŸ¦₯ λ³Έλ¬Έ

πŸŽ―μ‹€μŠ΅μ˜ˆμ œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
                        🎯 array() 둜 [1,2,3] β†’ndarray([1,2,3])
                        ↓
                        🎯 zeros() 둜 shape=(2,3) β†’[[0,0,0],[0,0,0]]
                        ↓
              🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯 ones() 둜 shape=(2,3) β†’[[1,1,1],[1,1,1]]
              ↓        ↓
              ↓        🎯 empty() 둜 shape=(2,3) β†’μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ κ°’
    🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯     ↓
    ↓        ↓        🎯 arange() 둜 start,stop,step β†’[0,1,2,3,4]
    ↓        ↓        ↓
    ↓        ↓        🎯 linspace() 둜 start,stop,num β†’κ· λ“± λΆ„ν• 
    ↓        ↓
    ↓        ↓        🎯 shape 둜 λ°°μ—΄ 크기 β†’(2,3)
    ↓        ↓        ↓
    ↓        🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯 ndim 둜 차원 개수 β†’2
    ↓                  ↓
    ↓                  🎯 dtype 둜 λ°μ΄ν„°νƒ€μž… β†’int64
    ↓                  ↓
    ↓                  🎯 size 둜 전체 개수 β†’6
    ↓
    ↓                  🎯 인덱싱 둜 [0,1] β†’νŠΉμ • [0,1]μœ„μΉ˜
    ↓                  ↓
    ↓                  🎯 μŠ¬λΌμ΄μ‹± 둜 a[0:2, 1:3] β†’λΆ€λΆ„λ°°μ—΄
    🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯
    ↓                  🎯 μ—΄ 전체 둜 a[:, 1] β†’2μ—΄ 전체
    ↓                  ↓
    ↓                  🎯 νŒ¬μ‹œ 둜 a[[0,2], [1,3]] β†’νŠΉμ • 인덱슀
    ↓                  ↓
    ↓                  🎯 λΆˆλ¦¬μ–Έ 둜 a[a > 5] →쑰건 만쑱 κ°’
    ↓
    ↓                  🎯 +, -, *, / 둜 μš”μ†Œλ³„ μ—°μ‚° β†’a+b, a*2
    ↓                  ↓
    ↓        🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯 ** 둜 κ±°λ“­μ œκ³± β†’a**2
    ↓        ↓연산     ↓
    ↓        ↓        🎯 @ 둜 ν–‰λ ¬κ³±μ…ˆ β†’a@b
    ↓        ↓        ↓
    ↓        ↓        🎯 >, <, == 둜 비ꡐ μ—°μ‚° β†’a>0
    ↓        ↓        ↓
    ↓        ↓        🎯 &, |, ~ 둜 논리 μ—°μ‚° β†’(a>0) & (a<5)
    🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯
    ↓        ↓        🎯 sum() 둜 전체 합계 β†’np.sum(a, axis=0)
    ↓        ↓        ↓
    ↓        ↓        🎯 min(), max() 둜 μ΅œμ†Œ/μ΅œλŒ€ β†’np.min(a)
    ↓        🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯
    ↓          톡계     🎯 mean() 둜 평균 β†’np.mean(a)
    ↓                  ↓
    ↓                  🎯 argmin() 둜 μ΅œμ†Œκ°’μœ„μΉ˜ β†’np.argmin(a)
    ↓                  ↓
    ↓                  🎯 cumsum() 둜 λˆ„μ ν•© β†’np.cumsum(a)
    ↓
    ↓                  🎯 reshape() 둜 λͺ¨μ–‘ λ³€κ²½ β†’a.reshape(3,4)
    ↓                  ↓
    ↓                  🎯 T 둜 μ „μΉ˜ν–‰λ ¬ β†’a.T
    ↓                  ↓
    ↓        🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯 ravel() 둜 1μ°¨μ›λ³€ν™˜ β†’a.ravel()
    ↓        ↓ λ³€ν™˜   ↓
    🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯        🎯 resize() 둜 크기 λ³€κ²½ β†’a.resize((4,5))
    ↓        ↓
    ↓        ↓        🎯 vstack() 둜 수직 κ²°ν•© β†’np.vstack((a,b))
    ↓        🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯
    ↓          κ²°ν•©/λΆ„ν•  🎯 hstack() 둜 μˆ˜ν‰ κ²°ν•© β†’np.hstack((a,b))
    ↓                  ↓
    ↓                  🎯 hsplit() 둜 μˆ˜ν‰ λΆ„ν•  β†’np.hsplit(a,3)
    ↓                  ↓
    ↓                  🎯 vsplit() 둜 수직 λΆ„ν•  β†’np.vsplit(a,2)
    ↓
    ↓                  🎯 sqrt() 둜 제곱근 β†’np.sqrt(a)
    ↓                  ↓
    ↓                  🎯 exp(), log() 둜 μ§€μˆ˜λ‘œκ·Έ β†’np.exp(a)
    🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯
                        🎯 sin(), cos() 둜 μ‚Όκ°ν•¨μˆ˜ β†’np.sin(a)
                        ↓
                        🎯 floor(), ceil() 둜 λ‚΄λ¦Ό/올림 β†’np.floor(a)
                        ↓
                        🎯 round() 둜 반올림 β†’np.round(a,2)

πŸ“Š κΈ°λ³Έ κ°œλ…

Broadcasting

λ‹€λ₯Έ 크기 λ°°μ—΄κ°„ μ—°μ‚° κ°€λŠ₯

1
2
3
a = np.array([1, 2, 3])  # (3,)
b = np.array([[1], [2], [3]])  # (3,1)
c = a + b  # (3,3)

View vs Copy

1
2
3
a = np.array([1, 2, 3, 4])
b = a[1:3]  # λ·°- a λ³€κ²½μ‹œ b도 λ³€κ²½
c = a[1:3].copy()  # 볡사- 독립적

axis μ΄ν•΄ν•˜κΈ°

```plain text axis=0: ν–‰ λ°©ν–₯ μ—°μ‚° (μ•„λž˜λ‘œ λ‚΄λ €κ°€λ©°) axis=1: μ—΄ λ°©ν–₯ μ—°μ‚° (였λ₯Έμͺ½μœΌλ‘œ μ΄λ™ν•˜λ©°)

1
2
3
4
5
### dtype μ’…λ₯˜

```plain text
int32, int64, float32, float64, bool, complex

πŸ“ λ°°μ—΄ 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# κΈ°λ³Έ λ°°μ—΄ 생성
a = np.array([1, 2, 3])  # [1 2 3]
b = np.array([[1, 2], [3, 4]])  # [[1 2]
#  [3 4]]

# 특수 λ°°μ—΄
np.zeros((2, 3))  # [[0. 0. 0.]
#  [0. 0. 0.]]
np.ones((2, 2))  # [[1. 1.]
#  [1. 1.]]
np.empty((2, 2))  # μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ κ°’
np.eye(3)  # 3x3 λ‹¨μœ„ν–‰λ ¬
np.identity(3)  # 3x3 λ‹¨μœ„ν–‰λ ¬

# λ²”μœ„ λ°°μ—΄
np.arange(5)  # [0 1 2 3 4]
np.arange(1, 6, 2)  # [1 3 5]
np.linspace(0, 1, 5)  # [0.   0.25 0.5  0.75 1.  ]

πŸ“Š λ°°μ—΄ 속성

1
2
3
4
5
6
7
8
a = np.array([[1, 2, 3], [4, 5, 6]])

a.shape  # (2, 3)
a.ndim  # 2
a.dtype  # int64
a.size  # 6
a.itemsize  # 8 bytes

πŸ“ 인덱싱 & μŠ¬λΌμ΄μ‹±

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

# κΈ°λ³Έ 인덱싱
a[0, 0]  # 1
a[2, 3]  # 12

# μŠ¬λΌμ΄μ‹±
a[0:2, 1:3]  # [[2 3]
#  [6 7]]
a[:, 1]  # [2 6 10]
a[1, :]  # [5 6 7 8]

# νŒ¬μ‹œ 인덱싱
a[[0, 2], [1, 3]]  # [2 12]
a[[0, 2]]  # [[1 2 3 4]
#  [9 10 11 12]]

# λΆˆλ¦¬μ–Έ 인덱싱
mask = a > 5
a[mask]  # [6 7 8 9 10 11 12]
a[a > 5]  # [6 7 8 9 10 11 12]
a[(a > 5) & (a < 10)]  # [6 7 8 9]

πŸ”’ μ—°μ‚°

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
a = np.array([10, 20, 30, 40])
b = np.array([1, 2, 3, 4])

# κΈ°λ³Έ μ—°μ‚°
a + b  # [11 22 33 44]
a - b  # [9 18 27 36]
a * b  # [10 40 90 160]
a / b  # [10. 10. 10. 10.]
a ** 2  # [100 400 900 1600]
a % 3  # [1 2 0 1]
a // 3  # [3 6 10 13]

# ν–‰λ ¬ κ³±μ…ˆ
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
A @ B  # [[19 22]
#  [43 50]]
np.dot(A, B)  # λ™μΌν•œ κ²°κ³Ό

# 비ꡐ μ—°μ‚°
a > 25  # [False False True True]
a == 30  # [False False True False]
np.array_equal(a, b)  # False

# 논리 μ—°μ‚°
(a > 20) & (a < 40)  # [False False True False]
(a <= 20) | (a >= 40)  # [True True False True]
~(a > 30)  # [True True True False]

πŸ“ˆ 톡계 ν•¨μˆ˜

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
a = np.array([[1, 2, 3], [4, 5, 6]])

# κΈ°λ³Έ 톡계
np.sum(a)  # 21
np.sum(a, axis=0)  # [5 7 9]
np.sum(a, axis=1)  # [6 15]

np.min(a)  # 1
np.max(a)  # 6
np.mean(a)  # 3.5
np.median(a)  # 3.5
np.std(a)  # 1.707...

# 인덱슀 κ΄€λ ¨
np.argmin(a)  # 0
np.argmax(a)  # 5
np.argmin(a, axis=0)  # [0 0 0]
np.argmax(a, axis=1)  # [2 2]

# λˆ„μ  ν•¨μˆ˜
np.cumsum(a)  # [1 3 6 10 15 21]
np.cumprod(a)  # [1 2 6 24 120 720]

πŸ”„ λͺ¨μ–‘ λ³€ν™˜

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
a = np.arange(12)

# λͺ¨μ–‘ λ³€ν™˜
a.reshape(3, 4)  # 3x4 λ°°μ—΄
a.reshape(3, -1)  # μžλ™ 계산
a.reshape(-1, 2)  # μžλ™ 계산
a.ravel()  # 1차원 λ³€ν™˜ [0 1 2 ... 11]

# μ „μΉ˜ (Transpose)
b = a.reshape(3, 4)
b.T  # 4x3 μ „μΉ˜ ν–‰λ ¬

# 크기 λ³€κ²½
# (a의 크기가 λ°”λ€Œμ–΄λ„ 변경됨)
a.resize(3, 4)

πŸ”— κ²°ν•© & λΆ„ν• 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])

# κ²°ν•©
np.vstack((a, b))  # [[1 2]
#  [3 4]
#  [5 6]
#  [7 8]]

np.hstack((a, b))  # [[1 2 5 6]
#  [3 4 7 8]]

np.concatenate((a, b), axis=0)  # vstackκ³Ό 동일
np.concatenate((a, b), axis=1)  # hstackκ³Ό 동일

# λΆ„ν• 
a = np.arange(16).reshape(4, 4)
np.hsplit(a, 2)  # [array([[0, 1], [4, 5], [8, 9], [12, 13]]),
#  array([[2, 3], [6, 7], [10, 11], [14, 15]])]

np.vsplit(a, 2)  # [array([[0, 1, 2, 3], [4, 5, 6, 7]]),
#  array([[8, 9, 10, 11], [12, 13, 14, 15]])]

np.split(a, 2, axis=0)  # vsplitκ³Ό 동일
np.split(a, 2, axis=1)  # hsplitκ³Ό 동일

πŸ”’ μˆ˜ν•™ ν•¨μˆ˜

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
a = np.array([0, np.pi / 2, np.pi])

# κΈ°λ³Έ ν•¨μˆ˜
np.sqrt(a)  # [0. 1.25331414 1.77245385]
np.exp(a)  # [1. 4.81047738 23.14069263]
np.log(np.array([1, 10, 100]))  # [0. 2.30258509 4.60517019]
np.log10(np.array([1, 10, 100]))  # [0. 1. 2.]

# 삼각 ν•¨μˆ˜
np.sin(a)  # [0. 1. 0.]
np.cos(a)  # [1. 0. -1.]
np.tan(a)  # [0. 16331239353195370. 0.]
np.degrees(a)  # [0. 90. 180.]
np.radians(np.array([0, 90, 180]))  # [0. 1.57079633 3.14159265]

# 반올림 ν•¨μˆ˜
np.floor(np.array([1.2, 1.5, 1.8, 2.1]))  # [1. 1. 1. 2.]
np.ceil(np.array([1.2, 1.5, 1.8, 2.1]))  # [2. 2. 2. 3.]
np.round(np.array([1.2, 1.5, 1.8, 2.1]))  # [1. 2. 2. 2.]
np.round(np.array([1.23, 1.56]), 1)  # [1.2 1.6]

πŸ” View vs Copy

1
2
3
4
5
6
7
8
9
10
11
12
a = np.array([1, 2, 3, 4])

# View (원본과 곡유)
b = a[1:3]  # [2 3]
b[0] = 99  # bκ°€ [99 3]
print(a)  # [1 99 3 4] (a도 변경됨)

# Copy (독립적)
c = a[1:3].copy()  # [99 3]
c[0] = 88  # cκ°€ [88 3]
print(a)  # [1 99 3 4] (aλŠ” λ³€κ²½μ•ˆλ¨)

πŸ“Š Broadcasting

1
2
3
4
5
6
7
8
9
10
11
12
# 같은 크기 λ°°μ—΄
a = np.array([1, 2, 3])
b = a * 2  # [2 4 6]

# λ‹€λ₯Έ 크기 λ°°μ—΄κ°„ μ—°μ‚°
a = np.array([1, 2, 3])  # (3,) 크기
b = np.array([[1], [2], [3]])  # (3,1) 크기
c = a + b  # (3,3) 크기둜 결과:
# [[2 3 4]
#  [3 4 5]
#  [4 5 6]]

🎲 μœ μš©ν•œ ν•¨μˆ˜

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# λ°°μ—΄ 정보
np.info(np.ndarray)  # ndarray 정보 좜λ ₯

# 랜덀 생성
np.random.rand(2, 3)  # 2x3 균등뢄포 랜덀 (0~1)
np.random.randn(2, 3)  # 2x3 μ •κ·œλΆ„ν¬ 랜덀
np.random.randint(1, 10, (2, 3))  # 1~9 λ²”μœ„μ˜ 2x3 μ •μˆ˜ 랜덀

# μ •λ ¬
a = np.array([3, 1, 2])
np.sort(a)  # [1 2 3]
a.sort()  # a 자체λ₯Ό μ •λ ¬

# 쀑볡 제거
np.unique(np.array([1, 2, 2, 3, 3, 3]))  # [1 2 3]

# 차원 μΆ”κ°€/제거
a = np.array([1, 2, 3])
a[:, np.newaxis]  # μ—΄λ²‘ν„°λ‘œ λ³€ν™˜ [[1], [2], [3]]
a = np.array([[1], [2], [3]])
a.squeeze()  # 1μ°¨μ›μœΌλ‘œ λ³€ν™˜ [1 2 3]

This post is licensed under CC BY 4.0 by the author.