νμ΄ν μΉ ν μ μ μΈνκΈ°(PyTorch Tensor Allocation)
import torch
1) 1D with PyTorch
νμ΄ν μΉλ‘ 1μ°¨μ ν μμΈ λ²‘ν°λ₯Ό λ§λ€μ΄λ΄ μλ€.
t = torch.FloatTensor([0., 1., 2., 3., 4., 5., 6.])
print(t)
dim()μ μ¬μ©νλ©΄ νμ¬ ν μμ μ°¨μμ 보μ¬μ€λλ€. shapeλ size()λ₯Ό μ¬μ©νλ©΄ ν¬κΈ°λ₯Ό νμΈν μ μμ΅λλ€.
print(t.dim()) # rank. μ¦, μ°¨μ
print(t.shape) # shape
print(t.size()) # shape
1
torch.Size([7])
torch.Size([7])
νμ¬ 1μ°¨μ ν μμ΄λ©°, μμλ 7κ°μ λλ€. μΈλ±μ€λ‘ μ κ·Όνλ κ²κ³Ό μ¬λΌμ΄μ±μ ν΄λ΄ μλ€. λ°©λ²μ Numpy μ€μ΅κ³Ό κ°μ΅λλ€.
print(t[0], t[1], t[-1]) # μΈλ±μ€λ‘ μ κ·Ό
print(t[2:5], t[4:-1]) # μ¬λΌμ΄μ±
print(t[:2], t[3:]) # μ¬λΌμ΄μ±
tensor(0.) tensor(1.) tensor(6.)
tensor([2., 3., 4.]) tensor([4., 5.])
tensor([0., 1.]) tensor([3., 4., 5., 6.])
2) 2D with PyTorch
νμ΄ν μΉλ‘ 2μ°¨μ ν μμΈ νλ ¬μ λ§λ€μ΄λ΄ μλ€.
t = torch.FloatTensor([[1., 2., 3.],
[4., 5., 6.],
[7., 8., 9.],
[10., 11., 12.]
])
print(t)
tensor([[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.],
[10., 11., 12.]])
dim()μ μ¬μ©νλ©΄ νμ¬ ν μμ μ°¨μμ 보μ¬μ€λλ€. size()λ₯Ό μ¬μ©νλ©΄ ν¬κΈ°λ₯Ό νμΈν μ μμ΅λλ€.
print(t.dim()) # rank. μ¦, μ°¨μ
print(t.size()) # shape
2
torch.Size([4, 3])
νμ¬ ν μμ μ°¨μμ 2μ°¨μμ΄λ©°, (4, 3)μ ν¬κΈ°λ₯Ό κ°μ§λλ€. μ¬λΌμ΄μ±μ ν΄λ΄ μλ€.
print(t[:, 1]) # 첫λ²μ§Έ μ°¨μμ μ 체 μ νν μν©μμ λλ²μ§Έ μ°¨μμ 첫λ²μ§Έ κ²λ§ κ°μ Έμ¨λ€.
print(t[:, 1].size()) # ↑ μμ κ²½μ°μ ν¬κΈ°
tensor([ 2., 5., 8., 11.])
torch.Size([4])
μμ κ²°κ³Όλ 첫λ²μ§Έ μ°¨μμ μ 체 μ ννκ³ , κ·Έ μν©μμ λλ²μ§Έ μ°¨μμ 1λ² μΈλ±μ€ κ°λ§μ κ°μ Έμ¨ κ²½μ°λ₯Ό 보μ¬μ€λλ€. λ€μ λ§ν΄ ν μμμ λλ²μ§Έ μ΄μ μλ λͺ¨λ κ°μ κ°μ Έμ¨ μν©μ λλ€. κ·Έλ¦¬κ³ μ΄λ κ² κ°μ κ°μ Έμ¨ κ²½μ°μ ν¬κΈ°λ 4μ λλ€. (1μ°¨μ 벑ν°)
print(t[:, :-1]) # 첫λ²μ§Έ μ°¨μμ μ 체 μ νν μν©μμ λλ²μ§Έ μ°¨μμμλ 맨 λ§μ§λ§μμ 첫λ²μ§Έλ₯Ό μ μΈνκ³ λ€ κ°μ Έμ¨λ€.
tensor([[ 1., 2.],
[ 4., 5.],
[ 7., 8.],
[10., 11.]])
μμ κ²°κ³Όλ 첫λ²μ§Έ μ°¨μμ μ 체 μ νν μν©μμ λλ²μ§Έ μ°¨μμμλ 맨 λ§μ§λ§μμ 첫λ²μ§Έλ₯Ό μ μΈνκ³ λ€ κ°μ Έμ€λ κ²½μ°μ λλ€.
3) λΈλ‘λμΊμ€ν (Broadcasting)
λ νλ ¬ A, Bκ° μλ€κ³ ν΄λ΄ μλ€. νλ ¬μ λ§μ κ³Ό λΊμ μ λν΄ μκ³ κ³μ λ€λ©΄, μ΄ λ§μ κ³Ό λΊμ μ ν λμλ λ νλ ¬ A, Bμ ν¬κΈ°κ° κ°μμΌνλ€λ κ²μ μκ³ κ³μ€κ²λλ€. κ·Έλ¦¬κ³ λ νλ ¬μ΄ κ³±μ μ ν λμλ Aμ λ§μ§λ§ μ°¨μκ³Ό Bμ 첫λ²μ§Έ μ°¨μμ΄ μΌμΉν΄μΌν©λλ€.
λ¬Όλ‘ , μ΄λ° κ·μΉλ€μ΄ μμ§λ§ λ₯ λ¬λμ νκ²λλ©΄ λΆκ°νΌνκ² ν¬κΈ°κ° λ€λ₯Έ νλ ¬ λλ ν μμ λν΄μ μ¬μΉ μ°μ°μ μνν νμκ° μλ κ²½μ°κ° μκΉλλ€. μ΄λ₯Ό μν΄ νμ΄ν μΉμμλ μλμΌλ‘ ν¬κΈ°λ₯Ό λ§μΆ°μ μ°μ°μ μννκ² λ§λλ λΈλ‘λμΊμ€ν μ΄λΌλ κΈ°λ₯μ μ 곡ν©λλ€.
μ°μ κ°μ ν¬κΈ°μΌ λ μ°μ°μ νλ κ²½μ°λ₯Ό λ³΄κ² μ΅λλ€.
m1 = torch.FloatTensor([[3, 3]])
m2 = torch.FloatTensor([[2, 2]])
print(m1 + m2)
tensor([[5., 5.]])
μ¬κΈ°μ m1,κ³Ό m2μ ν¬κΈ°λ λ λ€ (1, 2)μ λλ€. κ·Έλμ λ¬Έμ μμ΄ λ§μ μ°μ°μ΄ κ°λ₯ν©λλ€. μ΄λ²μλ ν¬κΈ°κ° λ€λ₯Έ ν μλ€ κ°μ μ°μ°μ λ³΄κ² μ΅λλ€. μλλ 벑ν°μ μ€μΉΌλΌκ° λ§μ μ°μ°μ μννλ κ²μ 보μ¬μ€λλ€. λ¬Όλ‘ , μνμ μΌλ‘λ μλ μ°μ°μ΄ μ λλκ² λ§μ§λ§ νμ΄ν μΉμμλ λΈλ‘λμΊμ€ν μ ν΅ν΄ μ΄λ₯Ό μ°μ°ν©λλ€.
# Vector + scalar
m1 = torch.FloatTensor([[1, 2]])
m2 = torch.FloatTensor([3]) # [3] -> [3, 3]
print(m1 + m2)
tensor([[4., 5.]])
μλ m1μ ν¬κΈ°λ (1, 2)μ΄λ©° m2μ ν¬κΈ°λ (1,)μ λλ€. κ·Έλ°λ° νμ΄ν μΉλ m2μ ν¬κΈ°λ₯Ό (1, 2)λ‘ λ³κ²½νμ¬ μ°μ°μ μνν©λλ€. μ΄λ²μλ λ²‘ν° κ° μ°μ°μμ λΈλ‘λμΊμ€ν μ΄ μ μ©λλ κ²½μ°λ₯Ό λ³΄κ² μ΅λλ€.
# 2 x 1 Vector + 1 x 2 Vector
m1 = torch.FloatTensor([[1, 2]])
m2 = torch.FloatTensor([[3], [4]])
print(m1 + m2)
tensor([4., 5.],
[5., 6.]])
m1μ ν¬κΈ°λ (1, 2) m2μ ν¬κΈ°λ (2, 1)μμ΅λλ€. μ΄ λ 벑ν°λ μλ μνμ μΌλ‘λ λ§μ μ μνν μ μμ΅λλ€. κ·Έλ¬λ νμ΄ν μΉλ λ 벑ν°μ ν¬κΈ°λ₯Ό (2, 2)λ‘ λ³κ²½νμ¬ λ§μ μ μνν©λλ€.
# λΈλ‘λμΊμ€ν
κ³Όμ μμ μ€μ λ‘ λ ν
μκ° μ΄λ»κ² λ³κ²½λλμ§ λ³΄κ² μ΅λλ€.
[1, 2]
==> [[1, 2],
[1, 2]]
[3]
[4]
==> [[3, 3],
[4, 4]]
λΈλ‘λμΊμ€ν μ νΈλ¦¬νμ§λ§, μλμΌλ‘ μ€νλλ κΈ°λ₯μ΄λ―λ‘ μ¬μ©μ μ μ₯μμ κ΅μ₯ν μ£Όμν΄μ μ¬μ©ν΄μΌ ν©λλ€. μλ₯Ό λ€μ΄ A ν μμ B ν μκ° μμ λ, μ¬μ©μλ μ΄ λ ν μμ ν¬κΈ°κ° κ°λ€κ³ μ°©κ°νκ³ λ§μ μ°μ°μ μννλ€κ³ κ°μ ν΄λ³΄κ² μ΅λλ€. νμ§λ§ μ€μ λ‘ μ΄ λ ν μμ ν¬κΈ°λ λ¬λκ³ λΈλ‘λμΊμ€ν μ΄ μνλμ΄ λ§μ μ°μ°μ΄ μνλμμ΅λλ€. λ§μ½, λ ν μμ ν¬κΈ°κ° λ€λ₯΄λ€κ³ μλ¬λ₯Ό λ°μμν¨λ€λ©΄ μ¬μ©μλ μ΄ μ°μ°μ΄ μλͺ»λμμμ λ°λ‘ μ μ μμ§λ§ λΈλ‘λμΊμ€ν μ μλμΌλ‘ μνλλ―λ‘ μ¬μ©μλ λμ€μ μνλ κ²°κ³Όκ° λμ€μ§ μμλλΌλ μ΄λμ λ¬Έμ κ° λ°μνλμ§ μ°ΎκΈ°κ° κ΅μ₯ν μ΄λ €μΈ μ μμ΅λλ€.
4) μμ£Ό μ¬μ©λλ κΈ°λ₯λ€
1) νλ ¬ κ³±μ κ³Ό κ³±μ μ μ°¨μ΄(Matrix Multiplication Vs. Multiplication)
νλ ¬λ‘ κ³±μ
μ νλ λ°©λ²μ ν¬κ² λ κ°μ§κ° μμ΅λλ€. λ°λ‘ νλ ¬ κ³±μ
(.matmul)κ³Ό μμ λ³ κ³±μ
(.mul)μ
λλ€.
νμ΄ν μΉ ν
μμ νλ ¬ κ³±μ
μ λ³΄κ² μ΅λλ€. μ΄λ matmul()μ ν΅ν΄ μνν©λλ€.
m1 = torch.FloatTensor([[1, 2], [3, 4]])
m2 = torch.FloatTensor([[1], [2]])
print('Shape of Matrix 1: ', m1.shape) # 2 x 2
print('Shape of Matrix 2: ', m2.shape) # 2 x 1
print(m1.matmul(m2)) # 2 x 1
Shape of Matrix 1: torch.Size([2, 2])
Shape of Matrix 2: torch.Size([2, 1])
tensor([[ 5.],
[11.]])
μμ κ²°κ³Όλ 2 x 2 νλ ¬κ³Ό 2 x 1 νλ ¬(벑ν°)μ νλ ¬ κ³±μ μ κ²°κ³Όλ₯Ό 보μ¬μ€λλ€.
νλ ¬ κ³±μ μ΄ μλλΌ element-wise κ³±μ μ΄λΌλ κ²μ΄ μ‘΄μ¬ν©λλ€. μ΄λ λμΌν ν¬κΈ°μ νλ ¬μ΄ λμΌν μμΉμ μλ μμλΌλ¦¬ κ³±νλ κ²μ λ§ν©λλ€. μλλ μλ‘ λ€λ₯Έ ν¬κΈ°μ νλ ¬μ΄ λΈλ‘λμΊμ€ν μ΄ λ νμ element-wise κ³±μ μ΄ μνλλ κ²μ 보μ¬μ€λλ€. μ΄λ * λλ mul()μ ν΅ν΄ μνν©λλ€.
m1 = torch.FloatTensor([[1, 2], [3, 4]])
m2 = torch.FloatTensor([[1], [2]])
print('Shape of Matrix 1: ', m1.shape) # 2 x 2
print('Shape of Matrix 2: ', m2.shape) # 2 x 1
print(m1 * m2) # 2 x 2
print(m1.mul(m2))
Shape of Matrix 1: torch.Size([2, 2])
Shape of Matrix 2: torch.Size([2, 1])
tensor([[1., 2.],
[6., 8.]])
tensor([[1., 2.],
[6., 8.]])
m1 νλ ¬μ ν¬κΈ°λ (2, 2)μ΄μμ΅λλ€. m2 νλ ¬μ ν¬κΈ°λ (2, 1)μμ΅λλ€. μ΄λ element-wise κ³±μ μ μννλ©΄, λ νλ ¬μ ν¬κΈ°λ λΈλ‘λμΊμ€ν μ΄ λ νμ κ³±μ μ΄ μνλ©λλ€. λ μ ννλ μ¬κΈ°μ m2μ ν¬κΈ°κ° λ³νλ©λλ€.
# λΈλ‘λμΊμ€ν
κ³Όμ μμ m2 ν
μκ° μ΄λ»κ² λ³κ²½λλμ§ λ³΄κ² μ΅λλ€.
[1]
[2]
==> [[1, 1],
[2, 2]]
2) νκ· (Mean)
νκ· μ ꡬνλ λ°©λ²λ μ 곡νκ³ μμ΅λλ€. μ΄λ Numpyμμμ μ¬μ©λ²κ³Ό λ§€μ° μ μ¬ν©λλ€.
μ°μ 1μ°¨μμΈ λ²‘ν°λ₯Ό μ μΈνμ¬ .mean()μ μ¬μ©νμ¬ μμμ νκ· μ ꡬν©λλ€.
t = torch.FloatTensor([1, 2])
print(t.mean())
tensor(1.5000)
1κ³Ό 2μ νκ· μΈ 1.5κ° λμ΅λλ€. μ΄λ²μλ 2μ°¨μμΈ νλ ¬μ μ μΈνμ¬ .mean()μ μ¬μ©ν΄λ΄ μλ€. μ°μ 2μ°¨μ νλ ¬μ μ μΈν©λλ€.
t = torch.FloatTensor([[1, 2], [3, 4]])
print(t)
tensor([[1., 2.],
[3., 4.]])
2μ°¨μ νλ ¬μ΄ μ μΈλμμ΅λλ€. μ΄μ .mean()μ μ¬μ©ν©λλ€.
print(t.mean())
tensor(2.5000)
4κ°μ μμμ νκ· μΈ 2.5κ° λμμ΅λλ€. μ΄λ²μλ dim. μ¦, μ°¨μ(dimension)μ μΈμλ‘ μ£Όλ κ²½μ°λ₯Ό λ³΄κ² μ΅λλ€.
print(t.mean(dim=0))
tensor([2., 3.])
dim=0μ΄λΌλ κ²μ 첫λ²μ§Έ μ°¨μμ μλ―Έν©λλ€. νλ ¬μμ 첫λ²μ§Έ μ°¨μμ 'ν'μ μλ―Έν©λλ€. κ·Έλ¦¬κ³ μΈμλ‘ dimμ μ€λ€λ©΄ ν΄λΉ μ°¨μμ μ κ±°νλ€λ μλ―Έκ° λ©λλ€. λ€μ λ§ν΄ νλ ¬μμ 'μ΄'λ§μ λ¨κΈ°κ² λ€λ μλ―Έκ° λ©λλ€. κΈ°μ‘΄ νλ ¬μ ν¬κΈ°λ (2, 2)μμ§λ§ μ΄λ₯Ό μννλ©΄ μ΄μ μ°¨μλ§ λ³΄μ‘΄λλ©΄μ (1, 2)κ° λ©λλ€. μ΄λ (2,)μ κ°μΌλ©° 벑ν°μ λλ€. μ΄μ μ°¨μμ 보쑴νλ©΄μ νκ· μ ꡬνλ©΄ μλμ κ°μ΄ μ°μ°ν©λλ€.
# μ€μ μ°μ° κ³Όμ
t.mean(dim=0)μ μ
λ ₯μμ 첫λ²μ§Έ μ°¨μμ μ κ±°νλ€.
[[1., 2.],
[3., 4.]]
1κ³Ό 3μ νκ· μ ꡬνκ³ , 2μ 4μ νκ· μ ꡬνλ€.
κ²°κ³Ό ==> [2., 3.]
μ΄λ²μλ μΈμλ‘ dim=1μ μ£Όκ² μ΅λλ€. μ΄λ²μλ λλ²μ§Έ μ°¨μμ μ κ±°ν©λλ€. μ¦, μ΄μ΄ μ κ±°λ ν μκ° λμ΄μΌ ν©λλ€.
print(t.mean(dim=1))
tensor([1.5000, 3.5000])
μ΄μ μ°¨μμ΄ μ κ±°λμ΄μΌ νλ―λ‘ (2, 2)μ ν¬κΈ°μμ (2, 1)μ ν¬κΈ°κ° λ©λλ€. μ΄λ²μλ 1κ³Ό 2μ νκ· μ ꡬνκ³ 3κ³Ό 4μ νκ· μ ꡬνκ² λ©λλ€. κ·Έλ λ€λ©΄ κ²°κ³Όλ μλμ κ°μ΅λλ€.
# μ€μ μ°μ° κ²°κ³Όλ (2 × 1)
[1. 5]
[3. 5]
νμ§λ§ (2 × 1)μ κ²°κ΅ 1μ°¨μμ΄λ―λ‘ (1 × 2)μ κ°μ΄ ννλλ©΄μ μμ κ°μ΄ [1.5, 3.5]λ‘ μΆλ ₯λ©λλ€. μ΄λ²μλ dim=-1λ₯Ό μ£Όλ κ²½μ°λ₯Ό λ³΄κ² μ΅λλ€. μ΄λ λ§μ§λ§ μ°¨μμ μ κ±°νλ€λ μλ―Έμ΄κ³ , κ²°κ΅ μ΄μ μ°¨μμ μ κ±°νλ€λ μλ―Έμ κ°μ΅λλ€. κ·Έλ¬λ―λ‘ μμ μΆλ ₯ κ²°κ³Όκ° κ°μ΅λλ€.
print(t.mean(dim=-1))
tensor([1.5000, 3.5000])
3) λ§μ (Sum)
λ§μ (Sum)μ νκ· (Mean)κ³Ό μ°μ° λ°©λ²μ΄λ μΈμκ° μλ―Ένλ λ°λ μ νν λμΌν©λλ€. λ€λ§, νκ· μ΄ μλλΌ λ§μ μ ν λΏμ λλ€.
t = torch.FloatTensor([[1, 2], [3, 4]])
print(t)
tensor([[1., 2.],
[3., 4.]])
print(t.sum()) # λ¨μν μμ μ 체μ λ§μ
μ μν
print(t.sum(dim=0)) # νμ μ κ±°
print(t.sum(dim=1)) # μ΄μ μ κ±°
print(t.sum(dim=-1)) # μ΄μ μ κ±°
tensor(10.)
tensor([4., 6.])
tensor([3., 7.])
tensor([3., 7.])
4) μ΅λ(Max)μ μκ·Έλ§₯μ€(ArgMax)
μ΅λ(Max)λ μμμ μ΅λκ°μ 리ν΄νκ³ , μκ·Έλ§₯μ€(ArgMax)λ μ΅λκ°μ κ°μ§ μΈλ±μ€λ₯Ό 리ν΄ν©λλ€.
(2, 2) ν¬κΈ°μ νλ ¬μ μ μΈνκ³ Maxλ₯Ό μ¬μ©ν΄λ΄
μλ€.
t = torch.FloatTensor([[1, 2], [3, 4]])
print(t)
tensor([[1., 2.],
[3., 4.]])
μ°μ (2, 2) νλ ¬μ μ μΈνμμ΅λλ€. μ΄μ .max()λ₯Ό μ¬μ©ν©λλ€.
print(t.max()) # Returns one value: max
tensor(4.)
μμ μ€ μ΅λκ°μΈ 4λ₯Ό 리ν΄ν©λλ€.
μ΄λ²μλ μΈμλ‘ dim=0μ μ£Όκ² μ΅λλ€. 첫λ²μ§Έ μ°¨μμ μ κ±°νλ€λ μλ―Έμ
λλ€.
print(t.max(dim=0)) # Returns two values: max and argmax
(tensor([3., 4.]), tensor([1, 1]))
νμ μ°¨μμ μ κ±°νλ€λ μλ―Έμ΄λ―λ‘ (1, 2) ν μλ₯Ό λ§λλλ€. κ²°κ³Όλ [3, 4]μ λλ€.
κ·Έλ°λ° [1, 1]μ΄λΌλ κ°λ ν¨κ» 리ν΄λμμ΅λλ€. maxμ dim μΈμλ₯Ό μ£Όλ©΄ argmaxλ ν¨κ» 리ν΄νλ νΉμ§ λλ¬Έμ λλ€. 첫λ²μ§Έ μ΄μμ 3μ μΈλ±μ€λ 1μ΄μμ΅λλ€. λλ²μ§Έ μ΄μμ 4μ μΈλ±μ€λ 1μ΄μμ΅λλ€. κ·Έλ¬λ―λ‘ [1, 1]μ΄ λ¦¬ν΄λ©λλ€. μ΄λ€ μλ―ΈμΈμ§λ μλ μ€λͺ ν΄λ΄€μ΅λλ€.
# [1, 1]κ° λ¬΄μ¨ μλ―ΈμΈμ§ λ΄
μλ€. κΈ°μ‘΄ νλ ¬μ λ€μ μκΈ°ν΄λ΄
μλ€.
[[1, 2],
[3, 4]]
첫λ²μ§Έ μ΄μμ 0λ² μΈλ±μ€λ 1, 1λ² μΈλ±μ€λ 3μ
λλ€.
λλ²μ§Έ μ΄μμ 0λ² μΈλ±μ€λ 2, 1λ² μΈλ±μ€λ 4μ
λλ€.
λ€μ λ§ν΄ 3κ³Ό 4μ μΈλ±μ€λ [1, 1]μ
λλ€.
λ§μ½ λ κ°λ₯Ό ν¨κ» 리ν΄λ°λ κ²μ΄ μλλΌ max λλ argmaxλ§ λ¦¬ν΄λ°κ³ μΆλ€λ©΄ λ€μκ³Ό κ°μ΄ 리ν΄κ°μλ μΈλ±μ€λ₯Ό λΆμ¬νλ©΄ λ©λλ€. 0λ² μΈλ±μ€λ₯Ό μ¬μ©νλ©΄ max κ°λ§ λ°μμ¬ μ μκ³ , 1λ² μΈλ±μ€λ₯Ό μ¬μ©νλ©΄ argmax κ°λ§ λ°μμ¬ μ μμ΅λλ€.
print('Max: ', t.max(dim=0)[0])
print('Argmax: ', t.max(dim=0)[1])
Max: tensor([3., 4.])
Argmax: tensor([1, 1])
μ΄λ²μλ dim=1λ‘ μΈμλ₯Ό μ£Όμμ λμ dim=-1λ‘ μΈμλ₯Ό μ£Όμμ λλ₯Ό λ³΄κ² μ΅λλ€.
print(t.max(dim=1))
print(t.max(dim=-1))
(tensor([2., 4.]), tensor([1, 1]))
(tensor([2., 4.]), tensor([1, 1]))
'λ₯λ¬λ > Today I learned :' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λ₯λ¬λμ λͺ¨λ ν΅μ¬ κ°λ μ 리1 (0) | 2022.12.27 |
---|---|
νμ΄ν μΉ ν¨ν€μ§ κΈ°λ³Έ μ‘°μλ² μ΅νκΈ° 3 - python νλ ¬, ν μ (0) | 2022.12.26 |
νμ΄ν μΉ ν¨ν€μ§ κΈ°λ³Έ μ‘°μλ² μ΅νκΈ° 1 - ν μμ ꡬ쑰 (0) | 2022.12.26 |
λ₯λ¬λ λ―ΈλΆ νΈλ―ΈλΆ κ²½μ¬νκ°λ² (0) | 2022.12.24 |
λ₯λ¬λ μ κ²½λ§ νμ΅ μμ€ν¨μ(μ€μ°¨μ κ³±ν©, ν¬λ‘μ€ μνΈλ‘νΌ μ€μ°¨) (0) | 2022.12.22 |