import numpy as np
arr = np.array([1, 2, 3])
print(np.linalg.norm(arr))
Numpy๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์
- ๋ฐ์ดํฐ๋ ๋ฒกํฐ๋ก ํํ๋๋ฉฐ, ๋ฐ์ดํฐ ๋ถ์์ ํ๋ ค๋ฉด ํ์์ ์ผ๋ก ๋ฒกํฐ ์ฐ์ฐ์ ํ๊ฒ ๋๋ค.
- ์์น ์ฐ์ฐ์ ์์ ์ฑ์ด ๋ณด์ฅ๋์ด ์์ด ๋ง์ ์ค์ ์ฐ์ฐ์ด ์๊ตฌ๋๋ ๋จธ์ ๋ฌ๋์์ ์ฑ๋ฅ ์ ํ๋ฅผ ์ต์ํํ ์ ์๋ค.
- numpy๋ ๋ฒกํฐ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์ต์ ํ๋์ด ์์ด ๋ฆฌ์คํธ๋ก ๊ตฌํํ์ ๋๋ณด๋ค ํจ์ฌ ๋ ๋์ ์๋๋ฅผ ๋ณด์ฌ์ค๋ค.
- <๋ฆฌ์คํธ์ ๊ณตํต์ >
- indexing์ผ๋ก ์์์ ์ ๊ทผํ ์ ์๋ค.
- ์์ฑ ํ assignment operator๋ฅผ ์ด์ฉํ์ฌ ์์์ update๊ฐ ๊ฐ๋ฅํ๋ค.
- <๋ฆฌ์คํธ์ ์ฐจ์ด์ >
- ์ ์ธํ ์ดํ์ ํฌ๊ธฐ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- ๋ชจ๋ ์์์ ๋ฐ์ดํฐ ํ์ ์ด ๋์ผํด์ผ ํ๋ค.
# ํ์ด์ฌ ๋ฆฌ์คํธ ์ ์ธ
data = [1, 2, 3, 4, 5]
# ํ์ด์ฌ 2์ฐจ์ ๋ฆฌ์คํธ(ํ๋ ฌ) ์ ์ธ
data2 = [[1, 2], [3, 4]]
# ํ์ด์ฌ list๋ฅผ numpy array๋ก ๋ณํ
arr = np.array(data)
# arr = np.array([1, 2, 3, 4, 5]) ๊ฐ์ ๋ฐฐ์ด
# 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ np.array๋ก ๋ง๋ฆ
arr2 = np.array(data2)
์ฐ์๋ ์ซ์๋ฅผ Numpy Array๋ก ํํํ๊ณ ์ถ์ ๋๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
# 0๋ถํฐ 9๊น์ง ์ซ์๋ฅผ ์๋์ผ๋ก ์์ฑํ array (๊ฐ์ ๊ฒฐ๊ณผ)
np.array(list(range(10)))
np.arange(10)
# 10๋ถํฐ 99๊น์ง ์ซ์๋ฅผ ์๋์ผ๋ก ์์ฑํ array (๊ฐ์ ๊ฒฐ๊ณผ)
np.array(list(range(10, 100)))
np.arange(10, 100)
Numpy Array์ ํฌ๊ธฐ๋ฅผ ํ์ธํ๋ ค๋ฉด shape ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
arr.shape # (5, ) != (5, 1)
arr2.shape # (2, 2)
# 3 x 3 ํ๋ ฌ ์์ฑ
x = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# ์ด์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ณ ์ ํ๋ค๋ฉด reshape ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
np.arange(1, 10).reshape(3, 3) # (9, ) -> (3, 3)
# row vector๋ฅผ column vector๋ก
np.arange(6).reshape(6, 1)
# ํผ์น๊ธฐ
x.reshape(-1, )
arr1 = np.array([[1, 2, 3]])
arr2 = np.array([[4, 5, 6]])
# arr1 + arr2 = ?
# L = [1, 2, 3]
# L2 = [4, 5, 6]
# L + L2
# arr1์ arr2๋ฅผ ํฉ์นจ
np.concatenate([arr1, arr2], axis=0)
๊ฐ๋ก ๋๋ ์ธ๋ก๋ฅผ ์ง์ ํด์ ํฉ์น๊ณ ์ถ์ผ๋ฉด vstack, hstack ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
# stacking vertically
np.vstack([arr1, arr2])
# stacking horizontally
np.hstack([arr1, arr2])
# v1 = (1, 2, 3), v2 = (4, 5, 6) ๋ฒกํฐ 2๊ฐ ์์ฑ
v1 = np.array([1, 2, 3])
v2 = np.array([4, 5, 6])
# ๋ฆฌ์คํธ๋ก ๋ํ๊ธฐ ์ฐ์ฐ
L = [1, 2, 3]
L2 = [4, 5, 6]
L + L2
# vector addition
v1 + v2
# vector subtraction
v1 - v2
# (not vector operation) elementwise multiplication
v1 * v2
# (not vector operation) elementwise division
v1 / v2
# dot product
v1 @ v2 # 1x4 + 2x5 + 3x6
arr1 = np.array([1, 2, 3])
arr2 = np.array([[-1, -1, -1],
[1, 1, 1]])
arr2.shape
# 2๊ฐ์ array๋ฅผ ํฉ ์ฐ์ฐ
arr1 + arr2
out : array([[0, 1, 2], [2, 3, 4]])
# 2๊ฐ์ array๋ฅผ ๊ณฑ ์ฐ์ฐ
arr1 * arr2
out : array([[-1, -2, -3], [1, 2, 3]])
# ๋ฐ๋ณต๋ฌธ์ผ๋ก ํํํ ์ฝ๋
arr1.shape[0]
f = lambda x : 1/x
arr1 = np.array([1., 2., 3.])
for i in range(arr1.shape[0]):
arr1[i] = f(arr1[i])
print(arr1)
# Universal Function์ ์ฌ์ฉํ ์ฝ๋
arr1 = np.array([1., 2., 3.])
print(1 / arr1) # universal func
arr1 = np.arange(10)
# ์ฒซ๋ฒ์งธ ์์
arr1[0]
# ๋ง์ง๋ง ์์
arr1[-1]
# ์์์๋ถํฐ ์์ 3๊ฐ slicing
arr1[:3]
arr2 = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
arr2
# arr2์ 2th row, 3th column ์์ = 7
arr2[1][2]
arr2[1, 2]
# arr2์ ์ธ๋ฒ์งธ column [3, 7, 11]
arr2[0, 2]
arr2[1, 2]
arr2[2, 2]
arr2[:, 2]
# arr2์ ๋๋ฒ์งธ row
arr2[0:2, 0:2] # arr2[1]
# random sampling
mat1 = np.random.randn(5, 3)
mat1
# ์ ๋๊ฐ ์์ฐ๊ธฐ
np.abs(mat1)
# ์ ๊ณฑํ๊ธฐ
np.square(mat1)
# ์ ๊ณฑ๊ทผ ๊ตฌํ๊ธฐ
np.sqrt(mat1)
# linear algebra functions
vec = np.array([1, 2, 2])
mat = np.array([[1, 2],
[3, 4]])
# ํ๋ ฌ์
np.linalg.det(mat)
# ์ญํ๋ ฌ
np.linalg.inv(mat)
# 1norm
np.linalg.norm(vec)
# ๊ณ ์ ๊ฐ, ๊ณ ์ ๋ฒกํฐ
np.linalg.eig(mat)
# ์ ํ์ฐ๋ฆฝ๋ฐฉ์ ์์ ํด
a = np.array([10, 15])
np.linalg.solve(mat,a)
mat2 = np.random.rand(3, 2)
mat2
# Summation
np.sum(mat2)
np.sum(mat2, axis=0) # row ๋ฐฉํฅ ํฉ๊ณ
np.sum(mat2, axis=1) # column ๋ฐฉํฅ ํฉ๊ณ
# mean
np.mean(mat2)
np.mean(mat2, axis=0) # row ๋ฐฉํฅ ํ๊ท
np.mean(mat2, axis=1) # column ๋ฐฉํฅ ํ๊ท
# std
np.std(mat2)
# min, max
np.min(mat2, axis=0) # ๊ฐ row์ ๋ํ ์ต์๊ฐ
np.max(mat2, axis=1) # ๊ฐ column์ ๋ํ ์ต๋๊ฐ
# ์ต์๊ฐ์ด ์๋ Index
np.argmin(mat2, axis=0)
# ์ต๋๊ฐ์ด ์๋ Index
np.argmax(mat2, axis=1)
# ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
np.sort(mat2, axis=0)
# ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
#np.sort(mat2, axis=0)[::-1]
# index๋ฅผ ์ ๋ ฌ
np.argsort(mat2, axis=0)