Post

[Python] ๋„˜ํŒŒ์ด(Numpy)

๐Ÿ“Œ ๋“ค์–ด๊ฐ€๋ฉฐ

ํŒŒ์ด์ฌ์œผ๋กœ ๋ฐ์ดํ„ฐยทํ†ต๊ณ„ ๋ถ„์„์„ ํ•  ๋•Œ ํ•ต์‹ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” numpy, pandas, matplotlib๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๊ทธ์ค‘ Numpy๋ฅผ ์ •๋ฆฌํ•œ๋‹ค.

Numpy๋ž€? ๋ฐฐ์—ด์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ndarray ๊ฐ์ฒด๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ํŒŒ์ด์ฌ ๊ธฐ๋ณธ ๋ฆฌ์ŠคํŠธ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด ๋” ํ–ฅ์ƒ๋œ ๊ธฐ๋Šฅ(๋ฒกํ„ฐยทํ–‰๋ ฌ ์—ฐ์‚ฐ)์„ ์ค€๋‹ค.

1
2
3
4
5
6
import numpy as np

arr = [1, 2, 3, 4]
a = np.array(arr)
print(type(a))
# >>> <class 'numpy.ndarray'>

1. ๋ฐฐ์—ด ์ƒ์„ฑ ๋ฉ”์†Œ๋“œ

๋ฉ”์†Œ๋“œ์—ญํ• 
np.zeros(n)0์œผ๋กœ ์ฑ„์šด ๋ฐฐ์—ด
np.ones(n)1๋กœ ์ฑ„์šด ๋ฐฐ์—ด
np.arange(s,e,step)๋ฒ”์œ„ ๋ฐฐ์—ด (๋ฆฌ์ŠคํŠธ ๋ถˆํ•„์š”)
np.array(...).reshape(r,c)ํ–‰ยท์—ด ์žฌ๊ตฌ์„ฑ
1
2
3
4
5
6
7
8
9
np.zeros(10)                # [0. 0. ... 0.]
np.ones(10, dtype=int)      # [1 1 ... 1]

np.ones((3, 3), dtype=int)  # 3x3 2์ฐจ์› ํ–‰๋ ฌ
# [[1 1 1]
#  [1 1 1]
#  [1 1 1]]

np.arange(2, 10, 2)         # [2 4 6 8]

reshape โ€” ๋ฐฐ์—ด์„ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์žฌ๊ตฌ์„ฑํ•œ๋‹ค.

1
2
3
4
a = np.array([1, 2, 3, 4])
a.reshape([2, 2])
# [[1 2]
#  [3 4]]

2. ๋ฐฐ์—ด ํ•ฉ์น˜๊ธฐ (stack)

๋ฉ”์†Œ๋“œ๋ฐฉํ–ฅ
np.vstack((a,b))์ˆ˜์ง(์„ธ๋กœ)
np.hstack((a,b))์ˆ˜ํ‰(๊ฐ€๋กœ)
1
2
3
4
5
a = np.array([1, 2])
b = np.array([3, 4])
np.vstack((a, b))
# [[1 2]
#  [3 4]]

โš ๏ธ ํ•ฉ์น  ๋•Œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.


3. ์ธ๋ฑ์‹ฑยท์Šฌ๋ผ์ด์‹ฑ

1
2
3
4
5
6
a = np.array(range(12)).reshape(4, 3)   # 0~11์„ 4x3์œผ๋กœ
a[0][1]     # ์ฒซ ํ–‰ ๋‘ ๋ฒˆ์งธ ์—ด โ†’ 1

a[:2, :]    # ์ฝค๋งˆ๋กœ ํ–‰ยท์—ด ๊ตฌ๋ถ„: 2ํ–‰๊นŒ์ง€, ๋ชจ๋“  ์—ด
# [[0 1 2]
#  [3 4 5]]

๐Ÿ’ก 2์ฐจ์› ๋ฐฐ์—ด์—์„œ ์ฝค๋งˆ(,)๊ฐ€ ํ–‰๊ณผ ์—ด์„ ๊ตฌ๋ถ„ํ•œ๋‹ค. a[:2, :]๋Š” โ€œ0~1ํ–‰, ๋ชจ๋“  ์—ดโ€์„ ์˜๋ฏธํ•œ๋‹ค.


4. ํ™œ์šฉ โ€” ์‹œ๊ฐํ™” & ํ–‰๋ ฌ๋กœ ๋ฐฉ์ •์‹ ํ’€๊ธฐ

ํ•จ์ˆ˜ ์‹œ๊ฐํ™” (matplotlib ๋ง›๋ณด๊ธฐ):

1
2
3
4
5
x = np.linspace(0, 1, 100)   # 0~1์„ 100๋“ฑ๋ถ„
y = x ** 2

import matplotlib.pyplot as plt
plt.plot(x, y)

Desktop View

์—ฐ๋ฆฝ๋ฐฉ์ •์‹์„ ์—ญํ–‰๋ ฌ๋กœ ํ’€๊ธฐ โ€” x + y = 4, 2x + 4y = 14:

1
2
3
4
5
6
a = np.array([[1, 1], [2, 4]])   # ๊ณ„์ˆ˜ ํ–‰๋ ฌ
b = np.array([4, 14])            # ์ƒ์ˆ˜

inv_a = np.linalg.inv(a)         # ์—ญํ–‰๋ ฌ
inv_a @ b                        # @ = ํ–‰๋ ฌ๊ณฑ
# >>> array([1., 3.])   โ†’ x=1, y=3

๐Ÿ’ก ๊ณ„์ˆ˜๋งŒ ๋ชจ์€ ํ–‰๋ ฌ์„ ์—ญํ–‰๋ ฌ๋กœ ๋ฐ”๊ฟ” ์ƒ์ˆ˜ ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ๊ณฑ(@)ํ•˜๋ฉด ํ•ด๊ฐ€ ๋‚˜์˜จ๋‹ค. ๋„˜ํŒŒ์ด๊ฐ€ ์„ ํ˜•๋Œ€์ˆ˜๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋‹ค๋ฃจ๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ๋‹ค.


๐Ÿ“ ์ •๋ฆฌ

1
2
3
4
5
Numpy
โ”œโ”€ ์ƒ์„ฑ    zeros/ones/arange/reshape
โ”œโ”€ ํ•ฉ์น˜๊ธฐ  vstack(์ˆ˜์ง) / hstack(์ˆ˜ํ‰) โ€” ๊ธธ์ด ๊ฐ™์•„์•ผ
โ”œโ”€ ์ธ๋ฑ์‹ฑ  a[ํ–‰, ์—ด], ์ฝค๋งˆ๋กœ ๊ตฌ๋ถ„
โ””โ”€ ์„ ํ˜•๋Œ€์ˆ˜  linalg.inv(์—ญํ–‰๋ ฌ), @ (ํ–‰๋ ฌ๊ณฑ)
๊ฐœ๋…ํ•œ ์ค„ ์ •์˜
ndarrayNumpy์˜ ํ–ฅ์ƒ๋œ ๋ฐฐ์—ด ๊ฐ์ฒด
reshape๋ฐฐ์—ด์„ ํ–‰ยท์—ด๋กœ ์žฌ๊ตฌ์„ฑ
@ (matmul)ํ–‰๋ ฌ ๊ณฑ ์—ฐ์‚ฐ
linalg.inv์—ญํ–‰๋ ฌ

Numpy๋Š” โ€œ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฒกํ„ฐยทํ–‰๋ ฌ๋กœ ๋‹ค๋ฃจ๋Š”โ€ ๋ฐ์ดํ„ฐ ๋ถ„์„์˜ ๊ธฐ๋ฐ˜์ด๋‹ค. reshapeยท์ธ๋ฑ์‹ฑยทํ–‰๋ ฌ๊ณฑ๋งŒ ์ตํ˜€๋„ pandasยท์‹œ๊ฐํ™”๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด์–ด์ง„๋‹ค.

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

Comments powered by Disqus.