์์ธํ ์ ๋ณด๋ ์๋ ์ฐธ๊ณ
NumPy๋?
์๋๋ NumPy๋ฅผ์ฐ์ตํด ๋ณผ ์ ์๋ ์ฌ์ดํธ์ด๋ค.
https://www.w3schools.com/python/numpy/default.asp
NumPy ์ด๋ชจ์ ๋ชจ
- ์ฐ๋ฆฌ ์ฃผ๋ณ์ ๋ง์๊ฒ๋ค์ด ํ๋ ฌ๋ก ํํ๋๋ค. ์ฌ์ง, ์๊ณ์ด ๋ฐ์ดํฐ ๋ชจ๋ ํ๋ ฌ๋ก ํํ๋๋ฉฐ, ์ด๋ NumPy๊ฐ ์ ํฉํ๋ค.
- NumPy์ ๋ฐฐ์ด์ธ ndarray๋ฅผ ์ด์ฉํ์ฌ ํ๋ ฌ ์ฐ์ฐ์ ํจ์จ์ ์ผ๋ก ํ ์ ์๋ค.
- NumPy๋ C ์ธ์ด๋ก ๊ตฌํ๋์ด ์์ด, Python๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ฒ ๋ฐฐ์ด ์ฐ์ฐ์ ์ํํ ์ ์๋ค.
- ndarray๋ ๊ฐ์ ์๋ฃํ์ ๊ฐ์ง๋ ์์๋ง ์ฒ๋ฆฌํ์ง๋ง, ํ๋ณํ์ ํตํด ์ฐ์ฐ์ด ๊ฐ๋ฅํ๋ค.
- ํ๋ณํ ๊ฐ๋ฅ ex) float ๋ฐฐ์ด์ int ๋ฐฐ์ด์ ๋ํ๋ฉด, ๊ฒฐ๊ณผ๋ floatํ์ผ๋ก ํ๋ณํ๋์ด ๊ณ์ฐ๋๋ค.
- ํ๋ณํ ๋ถ๊ฐ๋ฅ ex) ๋ฌธ์์ด ๋ฐฐ์ด๊ณผ ์ซ์ ๋ฐฐ์ด์ ๋ํ ์ ์๋ค.
๊ธฐ๋ณธ ๋ฐฐ์ด
import numpy as np
# 1์ฐจ์ ๋ฐฐ์ด
a = np.array([15, 20, 25, 30])
print(a) # [15 20 25 30]
# ๋ฐฐ์ด์ ํ๊ท
print(a.mean()) # 22.5
# ๊ฐ ์์์ 5๋ฅผ ๋ํ๊ธฐ
print(a + 5) # [20 25 30 35]
a.append(30) -> ํ๋ฆผ AttributeError: 'numpy.ndarray' object has no attribute 'append'
new_a = np.append(a, [9, 10])
print(new_a) # [15 20 25 30 9 10]
print(a) # [15 20 25 30] (์๋ณธ ๋ฐฐ์ด์ ๊ทธ๋๋ก ์ ์ง๋จ)
์์ฑ, ์์ฑ, ํจ์
๋ํ์ด ๋ฐฐ์ด์๋ ๋ชจ๋ ๊ฐ์ ์๋ฃํ์ด์ด์ผ ํ๋ฉฐ, ํฌํจํ ์ ์๋ ๊ฒฝ์ฐ ํ๋ณํ ํ๋ค.
# ๋ฆฌ์คํธ์์ numpy ๋ฐฐ์ด๋ก ๋ณํ
test2 = np.array(['15', '20', '25', True]) # 'True'๊ฐ String์ผ๋ก ํ๋ณํ๋จ
print(test2) # ['15' '20' '25' 'True']
# arange ํจ์: ์ซ์ ๋ฒ์ ์์ฑ
print(np.arange(0, 1, 0.1)) # [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
# ๋ค์ํ ์๋ฃํ์ ๋ด์ ์ ์์ผ๋ ํ ๋ณํ์ ์ฃผ์ ํ์
test3 = np.array([1, 2, 3, 4], dtype=bool)
print(test3) # [ True True True True]
# ์๋ฃํ์ด ์ง์ ๋ ๋ฐฐ์ด
test = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
print(test.dtype) # int64
print(test.itemsize) # 8 (๊ฐ ์์์ ๋ฐ์ดํธ ํฌ๊ธฐ)
print(test.ndim) # 2 (์ฐจ์ ์)
print(test.size) # 8 (์์ ๊ฐ์)
print(test.shape) # (2, 4) (ํ๊ณผ ์ด์ ๊ตฌ์กฐ)
print(test.strides) # (32, 8) (๋ฉ๋ชจ๋ฆฌ์์ ๊ฐ ์ฐจ์์ ๊ฑฐ๋ฆฌ)
'''
32: ์ฒซ ๋ฒ์งธ ์ฐจ์์ ๊ฐ ์์ ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ฑฐ๋ฆฌ. ์ฒซ ๋ฒ์งธ ์ฐจ์์ ๋ฐ๋ผ ํ ํ ๋์์ ๋ค์ ํ ์์ ๊ฐ๊ฒฉ์ด 32byte
8: ๋ ๋ฒ์งธ ์ฐจ์์ ๊ฐ ์์ ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ฑฐ๋ฆฌ. ์ด ๋ฐฉํฅ์ผ๋ก ํ ์์์์ ๋ค์ ์์ ๊ฑฐ๋ฆฌ๊ฐ 8byte
'''
# ๋ค์ฐจ์ ๋ฐฐ์ด ๋ณํ
test = test.T # ์ ์น ํ๋ ฌ
print(test)
test.argmax(axis=0) # ๊ฐ์ฅ ํฐ ๊ฐ์ด ์๋ ๋ฐฉ๋ฒํธ array([1, 1, 1, 1])
test.argmax(axis=1) # array([3, 3])
ํ๋ ฌ ์ฐ์ฐ
# ํฉ๊ณ ๊ตฌํ๊ธฐ, axis๋ ์ฐจ์์ ์๋ฏธ
print(np.sum(test)) # ์ ์ฒด ํฉ: 36
print(np.sum(test, axis=0)) # ๊ฐ ์ด์ ํฉ: [10 26]
print(np.sum(test, axis=1)) # ๊ฐ ํ์ ํฉ: [ 6 8 10 12]
#๋ธ๋ก๋์บ์คํ
np + 5
np.append(test,[[10],[20]],axis=1)
# ๊ฒฐ๊ณผ
# array([[ 1, 2, 3, 4, 10],
# [ 5, 6, 7, 8, 20]])
# ํ๊ท ๊ณ์ฐ
a = np.array([1, 2, 3, 4, 5])
print(np.mean(a)) # 3.0
print(np.average(a, weights=[2, 1, 1, 0, 0])) # ๊ฐ์ค ํ๊ท : 1.75
#๊ฐ์ค์น์ ๋ฐ๋ผ 1์ด 2,3๋ณด๋ค 2๋ฐฐ ์์ฃผ ์ ํ๋๋ฉฐ, 4์ 5๋ ์ ํ๋์ง ์์
- np.bool ๋ ๋ ผ๋ฆฌ ์๋ฃํ์ด์ง๋ง, ์ซ์ ์ฐ์ฐ ๊ฐ๋ฅํ๋ค. {True:1, False:0}
- uint๋ ๋ถํธ์๋ ์ ์ํ
๋ฐฐ์ด ๋ณํ
newshape: ๋ฐฐ์ด์ ์๋ก์ด ํํ๋ฅผ ์ง์ ํ๋ ํํ (์ฐจ์ ๋ณ๊ฒฝ)
ex) 2์ฐจ์ -> 3์ฐจ์ ๋ฐฐ์ด๋ก ๋ณ๊ฒฝ
๊ฐ ์ฐจ์์ ํฌ๊ธฐ๋ก ๊ตฌ์ฑ๋๋ฏ๋ก, ์๋ณธ ๋ฐฐ์ด์ ์์ ์์ reshape์ ๊ณฑ์ด ๊ฐ์์ผ ํ๋ค.
-1์ ์๋์ผ๋ก ํด๋น ์ฐจ์ ํฌ๊ธฐ ๊ณ์ฐ์ํ ํน์ ๊ฐ์ด๋ค.
# reshape์ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด ํํ ๋ณํ
# ๊ธฐ์กด ๋ฐ์ดํฐ ์ ์งํ ์ฑ, ๋ฐฐ์ด ์ฐจ์๊ณผ ํฌ๊ธฐ๋ง ๋ณํ ๊ฐ๋ฅ / ๋ฐฐ์ด ์์ ์ ๊ณ ์
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
# 2x3 ๋ฐฐ์ด๋ก ๋ณํ
b = a.reshape((2, 3))
print(b)
# [[1 2 3]
# [4 5 6]]
#-1์ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ์ฒซ ๋ฒ์งธ ์ฐจ์์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐ, ์์์๊ฐ 6์ด๋ฏ๋ก (1,2,3)์ผ๋ก ๋ณํ๋จ
#์ฒซ ๋ฒ์งธ ์ฐจ์์ ํฌ๊ธฐ 1์ ๋๋จธ์ง ์ฐจ์์ ๋ง์ถฐ ์๋์ผ๋ก ๊ฒฐ์ ๋จ
a = a.reshape((-1, 2, 3)) # 3์ฐจ์ ๋ฐฐ์ด๋ก ๋ณํ
print(a.shape) # (1, 2, 3)
# ๋ฐฐ์ด์ 1์ฐจ์์ผ๋ก ๋ณํ
print(a.flatten()) # [10 20 30 40 50 60]
a.ndm # ์ฐจ์ ํ์ธ
a.shape # ํ๋ ฌ ํ์ธ
NaN, Inf
# NaN์ -1๋ก ๋ณ๊ฒฝ
test_ = np.array([[1., 2., 3., 4.], [5., 6., 7., np.nan]])
print(np.nan_to_num(test_, nan=-1))
# Inf๋ฅผ -2๋ก ๋ณ๊ฒฝ
test_ = np.array([[1., 2., 3., 4.], [5., 6., 7., np.inf]])
test_[test_ == np.inf] = -2
print(test_)
๋ณต์ ์ถ์ถ vs ๋น๋ณต์ ์ถ์ถ
# ๋ณต์ ์ถ์ถ
a = [1, 2, 3, 4, 5]
print(np.random.choice(a, 3, replace=True))
# ๋น๋ณต์ ์ถ์ถ
print(np.random.choice(a, 3, replace=False))
๋์ ์์ฑ
import random
random.seed(3) # ๋์ ์๋๋ฅผ ๊ณ ์
print(random.randint(1, 5)) # ํญ์ ๊ฐ์ ๋์ ๊ฐ ์ถ๋ ฅ
์ ๋ ฌ
# ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
print(np.sort(x)) # [ 1 2 3 4 5 6 7 8]
# ๊ฐ์ฒด ์์ฒด๋ฅผ ์ ๋ ฌ (์๋ณธ ๋ฐฐ์ด ๋ณ๊ฒฝ)
x.sort()
print(x) # [1 2 3 4 5 6 7 8]
# ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
sorted_x_desc = np.sort(x)[::-1]
print(sorted_x_desc) # [8 7 6 5 4 3 2 1]
์ฌ๋ผ์ด์ฑ๊ณผ ์ธ๋ฑ์ฑ
1์ฐจ์ ๋ฐฐ์ด
- ์ธ๋ฑ์ฑ: ๋ฐฐ์ด์์ ํน์ ํ ํ๋์ ์์๋ฅผ ์ ํํ๋ ๋ฐฉ๋ฒ
- ์ฌ๋ผ์ด์ฑ: ๋ฐฐ์ด์ ํน์ ๋ถ๋ถ์ ์ ํํ๋ ๋ฐฉ๋ฒ'start:stop:step'
- ์ธ๋ฑ์ฑ ์ฐจ์ ๋ณ๊ฒฝ ๊ฐ๋ฅ , ์ฌ๋ผ์ด์ฑ์ ์๋์ ์ฐจ์์ ์ ์ง
# [ 1 2 3 4 5 6 7 8]
# ์ธ๋ฑ์ฑ
print(x[x > 4]) # 4๋ณด๋ค ํฐ ๊ฐ๋ค๋ง ์ถ๋ ฅ (5, 6, 7, 8) ๋ถ๋ฆฌ์ธ ์ธ๋ฑ์ฑ
# ์ฌ๋ผ์ด์ฑ
print(x[2:6]) # 3๋ฒ์งธ๋ถํฐ 6๋ฒ์งธ ์ ๊น์ง (3, 4, 5, 6)
print(x[::2]) # 0๋ฒ์งธ๋ถํฐ ๋๊น์ง 2์นธ์ฉ ๊ฑด๋๋ฐ๊ธฐ (1, 3, 5, 7)
print(x[::-1]) # ๋ฐฐ์ด์ ๋ค์ง๊ธฐ (8, 7, 6, 5, 4, 3, 2, 1)
2์ฐจ์ ๋ฐฐ์ด
y = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# ์ธ๋ฑ์ฑ
print(y[0, 1]) # 0๋ฒ์งธ ํ,1๋ฒ์งธ ์ด ๊ฐ (2)
print(y[[0, 1]]) # 0๋ฒ์งธ ํ๊ณผ, 1๋ฒ์งธ ์ด [[1 2 3] [4 5 6]]
# ์ฌ๋ผ์ด์ฑ
print(y[1:, :2]) # 2๋ฒ์งธ ํ๋ถํฐ ๋ง์ง๋ง ํ๊น์ง, ์ฒซ ๋ฒ์งธ์ ๋ ๋ฒ์งธ ์ด๊น์ง (4, 5), (7, 8)
3์ฐจ์ ๋ฐฐ์ด
# 3x3x3 ํฌ๊ธฐ์ 3D ๋ฐฐ์ด ์์ฑ
x = np.array([[[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]]])
print(x)
'''
[[[ 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]]]
'''
#์ธ๋ฑ์ฑ
print(x[0, 1, 2]) # 6
print(x[1, 0, 2]) # 12
print(x[-1, -2, -3]) # ๋ง์ง๋ง 2D ๋ฐฐ์ด์์ ๋ ๋ฒ์งธ ํ, ์ธ ๋ฒ์งธ ์ด, ์ธ ๋ฒ์งธ ๊ฐ
print(x[x > 10]) # 10๋ณด๋ค ํฐ ๋ชจ๋ ๊ฐ ์ถ๋ ฅ
print(x[[0, 2], [1, 2], [1, 0]]) # ์ฒซ ๋ฒ์งธ์ ์ธ ๋ฒ์งธ 2D ๋ฐฐ์ด์์ (2,2)์ (3,1) ์์น์ ๊ฐ
#์ฌ๋ผ์ด์ฑ
print(x[0, :, :]) # ์ฒซ ๋ฒ์งธ 2D ๋ฐฐ์ด (์ ์ฒด ํ, ์ ์ฒด ์ด)
print(x[1, 0:2, 1:3]) # ๋ ๋ฒ์งธ 2D ๋ฐฐ์ด์์ ์ฒซ ๋ฒ์งธ์ ๋ ๋ฒ์งธ ํ, ๋ ๋ฒ์งธ์ ์ธ ๋ฒ์งธ ์ด
print(x[:, 1:, :]) # ๋ชจ๋ 2D ๋ฐฐ์ด์์ ๋ ๋ฒ์งธ ํ๋ถํฐ ๋ง์ง๋ง ํ๊น์ง, ๋ชจ๋ ์ด
print(x[:, -2:, -2:]) # ๋ชจ๋ 2D ๋ฐฐ์ด์์ ๋ ๋ฒ์งธ ํ๋ถํฐ ๋ง์ง๋ง ํ๊น์ง, ๋ ๋ฒ์งธ ์ด๋ถํฐ ๋ง์ง๋ง ์ด๊น์ง
append(), extend(), insert()
Python
- append(): ๋ฆฌ์คํธ์ ๋์ ํ๋์ ์์๋ฅผ ์ถ๊ฐ
- insert(): ๋ฆฌ์คํธ์ ์ง์ ๋ ์ธ๋ฑ์ค ์์น์ ํ๋์ ์์๋ฅผ ์ฝ์
- extend(): ๋ฆฌ์คํธ์ ๋ค๋ฅธ iterable์ ๋ชจ๋ ์์๋ฅผ ์ถ๊ฐ
NumPy
- numpy.append(): ๋ฐฐ์ด์ ๋์ ํ๋ ์ด์์ ์์๋ฅผ ์ถ๊ฐ
- numpy.insert(): ๋ฐฐ์ด์ ํน์ ์์น์ ์์๋ฅผ ์ฝ์
- numpy.concatenate(): ์ฌ๋ฌ ๋ฐฐ์ด์ ํ๋๋ก ๊ฒฐํฉ
import numpy as np
# Python
my_list = [1, 2, 3, 4]
# 1. append() - ๋ฆฌ์คํธ ๋์ ํ๋์ ์์๋ฅผ ์ถ๊ฐ
my_list.append(5)
print("List after append:", my_list) # [1, 2, 3, 4, 5]
# 2. insert() - ์ง์ ๋ ์ธ๋ฑ์ค(1)์ 4๋ฅผ ์ฝ์
my_list.insert(1, 4)
print("List after insert:", my_list) # [1, 4, 2, 3, 4, 5]
# 3. extend() - ๋ค๋ฅธ iterable์ ์์๋ค์ ๋ฆฌ์คํธ์ ์ถ๊ฐ
my_list.extend([6, 7])
print("List after extend:", my_list) # [1, 4, 2, 3, 4, 5, 6, 7]
# NumPy
arr = np.array([1, 2, 3, 4])
# 1. np.append() - ๋ฐฐ์ด ๋์ ํ๋ ์ด์์ ์์๋ฅผ ์ถ๊ฐ
arr_appended = np.append(arr, 5)
print("Array after np.append:", arr_appended) # [1 2 3 4 5]
# 2. np.insert() - ๋ฐฐ์ด์ ํน์ ์์น(1)์ 4๋ฅผ ์ฝ์
arr_inserted = np.insert(arr, 1, 4)
print("Array after np.insert:", arr_inserted) # [1 4 2 3 4]
# 3. np.concatenate() - ์ฌ๋ฌ ๋ฐฐ์ด์ ๊ฒฐํฉ
arr2 = np.array([5, 6, 7])
arr_concatenated = np.concatenate((arr, arr2))
print("Array after np.concatenate:", arr_concatenated) # [1 2 3 4 5 6 7]
# ์ถ๋ ฅ
List after append: [1, 2, 3, 4, 5]
List after insert: [1, 4, 2, 3, 4, 5]
List after extend: [1, 4, 2, 3, 4, 5, 6, 7]
Array after np.append: [1 2 3 4 5]
Array after np.insert: [1 4 2 3 4]
Array after np.concatenate: [1 2 3 4 5 6 7]
'๐ฐ์ฐ๋ฆฌ FISA > ๋น ๋ฐ์ดํฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Pandas ์ ๋ฆฌ (0) | 2025.01.10 |
---|---|
๋น ๋ฐ์ดํฐ ์ปค๋ฆฌ์ด ๊ฐ์ด๋๋ถ(2) (0) | 2024.12.24 |
๋น ๋ฐ์ดํฐ ์ปค๋ฆฌ์ด ๊ฐ์ด๋๋ถ(1) (2) | 2024.12.24 |