카테고리 없음

기술1 2025. 7. 5. 15:01
t = np.array([0., 1., 2., 3., 4., 5., 6.,])
print(t)

 

  • np.array(...)는 NumPy 배열 객체(ndarray) 를 생성하는 함수입니다.
  • [0., 1., 2., 3., 4., 5., 6.]는 실수형 숫자들로 이루어진 리스트(list)입니다.
    • 0.은 0.0, 즉 실수형(float)입니다.
    • 리스트 안에 실수만 있으므로, NumPy는 float64 타입의 배열로 만듭니다.
print('Rank  of t: ', t.ndim)
print('Shape of t: ', t.shape)

 

첫 번째 줄에서는 t.ndim을 출력합니다. 이건 배열 t의 차원 수를 알려줍니다. 예를 들어 t가 1차원 배열이면 결과는 1이 됩니다. 즉, 이 코드는 t라는 배열이 몇 차원인지 보여주는 것입니다.

 

두 번째 줄에서는 t.shape을 출력합니다. 이건 배열 t의 모양 또는 크기를 의미합니다. 예를 들어 t에 숫자 7개가 들어 있는 1차원 배열이라면 t.shape의 값은 (7,)이 됩니다. 이건 "길이가 7인 1차원 배열이다"라는 뜻입니다.

 

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

2차원 배열을 만드는 코드입니다. 이 배열은 4개의 행과 3개의 열을 가진 형태입니다. 각각의 내부 리스트가 한 줄(행)을 의미합니다.

  • 첫 번째 행: 1.0, 2.0, 3.0
  • 두 번째 행: 4.0, 5.0, 6.0
  • 세 번째 행: 7.0, 8.0, 9.0
  • 네 번째 행: 10.0, 11.0, 12.0

여기서 숫자 뒤에 점이 붙은 이유는 모두 실수(float) 타입이기 때문입니다. print(t)를 하면 이 배열이 행렬처럼 출력됩니다. 전체적으로 보면 4행 3열짜리 표처럼 생긴 숫자 배열이 나타납니다.

 

파이토치 이용

t = torch.FloatTensor([0., 1., 2., 3., 4., 5., 6.])
print(t)

torch의 float형 Tensor로 t를 만듭니다 .

dim은 차원, shape는 어느정도인지, size라는 함수를 사용할 수 있고 이는 shape와 같ㅇ습니다. 

 

마찬가지로 element 알 수 있고, slicing 했을 때도 알 수 있습니다. 

 

print(t.dim())  # rank
print(t.shape)  # shape
print(t.size()) # shape
print(t[0], t[1], t[-1])  # Element
print(t[2:5], t[4:-1])    # Slicing
print(t[:2], t[3:])       # Slicing

 

 

t = torch.FloatTensor([[1., 2., 3.],
                       [4., 5., 6.],
                       [7., 8., 9.],
                       [10., 11., 12.]
                      ])
print(t)

 

print(t.dim())  # rank
print(t.size()) # shape
print(t[:, 1])
print(t[:, 1].size())
print(t[:, :-1])

 

Broadcasting

파이토치에서는 boradcasting이라는 걸 제공합니다. matrix는 덧셈 뺼셈을 할 때 두 텐서간의 크기가 같아야 한다는 법칙이 존재하며 곱같은 것을 수행할 때 , 행렬 곱을 수행할 때도 첫번째차원과 마지막 차원이 일치해야 한다는 규칙이 있습니다. 

 

우리는 불가피하게 다른 크기의 행렬들을 텐서들을 더하거나 빼는 사칙연산을  수행하는 것이 발생할 수 있는데 broadcasting 기능으로 자동적으로 사이즈를 맞출 수 있습니다.

m1 = torch.FloatTensor([[3, 3]])
m2 = torch.FloatTensor([[2, 2]])
print(m1 + m2)

 

# Vector + scalar
m1 = torch.FloatTensor([[1, 2]])
m2 = torch.FloatTensor([3]) # 3 -> [[3, 3]]
print(m1 + m2)

 

# 2 x 1 Vector + 1 x 2 Vector
m1 = torch.FloatTensor([[1, 2]])
m2 = torch.FloatTensor([[3], [4]])
print(m1 + m2)

 

자동으로 실행되기 때문에 사용자 입장에서 주의해서 실행을 해야 합니다. 실수를 해서 두 matrix 와 tensor의 사이즈가 같아야 했음에도 불구하고 다른 사이즈가 계산이 되어서 더해지거나 빼지게 된다면 원래 에러가 나서 종료가 되어야 하는 것을 만약 종료가 된다면 알 수 있지만 자동적으로 브로드캐스팅을 한다면 나중에 프로그램이 에러없이 종료되었을 때, 어디에서 잘못되었는가?

 

이걸 찾을 때 어려움을 느끼기에 조심해야 하는 부분이 있습니다. 

 

Matrix Multiplication

 multiplication과 matrix multiplication은 다릅니다. 

 

(2x2) (2x1) 뒤와 앞이 일치하면 되기 때문에 이는 2x1 이 되는 것을 알 것입니다.

 

MEAN

t = torch.FloatTensor([1, 2])
print(t.mean())

 

 

# Can't use mean() on integers
t = torch.LongTensor([1, 2])
try:
    print(t.mean())
except Exception as exc:
    print(exc)

이렇게 LongTensor에 대해서는 못하는 걸 볼 수 있습니다. 

 

Max and Argmax

t = torch.FloatTensor([[1, 2], [3, 4]])
print(t)

 

print(t.max()) # Returns one value: max